Kezdőoldal » Számítástechnika » Programozás » Hogy tudom elérni azt, hogy a...

Hogy tudom elérni azt, hogy a for ciklusokban a az utolsó elem ne legyen "out of range"?

Figyelt kérdés

Á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.



2023. júl. 4. 19:36
1 2
 1/11 anonim ***** válasza:
100%
Pythonhoz nem értek, de ez így nem lesz hibás? A ciklusváltozó 0-tól indul, te pedig i-1-gyel indexeled a tömböt, akkor az első ciklusnál az index az -1 lesz, az utolsónál pedig len(fordulók)-2. Fura, hogy ez így nem okoz hibát. De mondom, én nem értek Pythonhoz.
2023. júl. 4. 19:52
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:
#1 az első index a 0. A ciklus addig tart amíg az index "eléri" a "fordulók" nevű lista elemeinek -1 számát.
2023. júl. 4. 19:54
 3/11 anonim ***** válasza:
100%

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])

2023. júl. 4. 20:10
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:
100%

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))

2023. júl. 4. 20:14
Hasznos számodra ez a válasz?
 5/11 anonim ***** válasza:
100%
De igen, a ciklusváltozód 0-val kezd, ebből levonsz egyet, akkpr -1 lesz. Ami nem hiba Pythonban, ekkor hátulró indexel, ez az utolsó elemre mutat
2023. júl. 5. 02:04
Hasznos számodra ez a válasz?
 6/11 anonim ***** válasza:

#5


Hm, de fura ez a Python :)

2023. júl. 5. 05:46
Hasznos számodra ez a válasz?
 7/11 A kérdező kommentje:

#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

2023. júl. 5. 06:00
 8/11 anonim ***** válasza:
100%

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.

2023. júl. 5. 11:44
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:
100%

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]

2023. júl. 5. 17:34
Hasznos számodra ez a válasz?
 10/11 anonim ***** válasza:

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.

2023. júl. 6. 18:18
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!