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.
Oké, a ciklusváltozód 0-tól indul, de akkor ennél a résznél forduló[0-1]-re vizsgálsz:
forduló[i-1] != "x" and int(forduló[i-1])
A range függvény az utolsó számot már nem rakja bele a sorozatba, szóval nem kell a -1.
Tehát helyesen:
for i in range(0, len(fordulók))
#4 ha azt csinálom, akkor is hiba lessz
többieknek: Két elemet kell a progmnak egyszerre megnéznie, tehát az éppen lévő elemet és az azutánit, ezt meg máskép nem igazán lehet lehet megoldani tudtommal
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.
Ha nem ez a hibaüzenet, akkor is jó lenne tudni mi az. Ezt amúgy a jövőre is mondom, ha van hibaüzenet, akkor azt mindig jó csatolni, mert hasznos infó lehet benne, most meg csak találgatunk.
Egyébként, a széria nincs resetelve, amikor nem teljesül a feltétel. Nem a szériák számát kell tudni, hanem meg kell találni a leghosszabbat, és annak a hossza kell.
Egyébként a 4-es feladatot én nem így csinálnám meg. Csak simán végigiterálsz a tömbön, megnézed, hogy a string adott pozíciójában 1-es van-e, ha igen, akkor növeled a győzelmi szériák számát, és ha ez a győzelmi széria nagyobb, mint az eddigi leghosszabb győzelmi széria, akkor a leghosszabb győzelmi széria értékét beállítod erre. Ha az adott pozícióban nem 1-es áll, akkor nullázod a győzelmi szériák számát.
Ez mondjuk Javaban valahogy így nézne ki: [link]
Van egy jó módszer, ha kettesével akarsz menni egy listán/stringen/iterablen: Csinálsz két külön iterátort ugyanabból a listából, az egyiket meglépteted egyel aztán összezippeled és a zippelt iterátoron lépkedsz:
s = "123456"
elso = iter(s)
masodik = iter(s)
next(masodik)
for x, y in zip(elso, masodik):
___print(x, y)
1 2
2 3
3 4
4 5
5 6
De magát a feladatot szerintem is hasonlóan kéne megoldani, mint #9 írta.
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!