Hogy tudom elérni azt, hogy a for ciklusokban a az utolsó elem ne legyen "out of range"?
Általában azt szoktam csinálni, hogy range-nek beírom a [0, n-1], ahol n egy lista elemeinek száma. Ez jól szokott működni, de azt vettem észre, hogy az utolsó elemet ebben az esetben a program nem szokta számolni. Hogy konkrét példát hozzak:
--
feladatlap: [link]
4. Feladat
széria = 0
for i in range(0, len(fordulók)-1):
if forduló[i-1] != "x" and int(forduló[i-1]) % 2 == 0 and forduló[i] != "x" and int(forduló[i]) % 2 == 0:
széria += 1
print("A leghosszabb győzelmi széria", széria, "fordulón át tartott.")
--
Itt az lenne a feladatom, hogy meddig tartott a leghosszabb széria, de ha az utolsó elem benne van a leghosszabb szériában, a program hiba üzenetet ír ki. Ha kell, az egész kódot elküldöm.
"Az a hiba üzenet, hogy dob egy InvalidValue exceptiont? Mert néha azt nézed x-e az elem, néha meg intte akarod konvertálni. Az x-et nem tudja számmá konvertálni."
Ez jelen esetben nem probléma. Ha a python interpreter egy "if X and ..." jellegű statement-tel találkozik, akkor megvizsgálja, hogy X igaz vagy hamis-e, és ha hamis, akkor az and utáni kódot nem hajtja végre, hiszen False and (akármi más) értéke False lesz, tehát eldőlt, hogy az if alatti kódot végre kell-e hajtani vagy át kell ugrani.
A kérdező kódjában tehát az int(forduló[i-1]) % 2 == 0 művelet csak akkor kerül végrehajtásra, ha forduló[i-1] != "x" értéke True volt, azaz a string kérdéses karaktere 1 vagy 2.
De ezt:
if forduló[i-1] != "x" and int(forduló[i-1]) % 2 == 0 and forduló[i] != "x" and int(forduló[i]) % 2 == 0:
egyszerűbben is ki lehet fejezni:
if 2 == forduló[i] == forduló[i-1]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!