Szeretném leszögezni,hogy nagyon kezdő vagyok még a programozásban. Adott egy olyan feladat,hogy van egy ilyen Stringem: Szervák = "ABABBABABBABA" Az a feladat,hogy meghatározzuk a szervák alapján,hogy ki nyert. Valaki segítene?
A problémám a következő.
Van a teniszben egy olyan,hogy Deuce ami azt jelenti,hogy ha 40-40 az állása és pl A nyeri a következő szervát akkor nála az Advantage,és ha utánna is A akkor nyer.Ha az A-nál az AD és utánna B akkor megint 40-40 és így a B-nél.
Na én bárhogy próbálkozom a Deuce probléma megoldásával sehogyse megy.Sokféleképpen megpróbáltam megoldani,de sehogy se megy,vagy nem működik.A legtöbbször mindig indexelési hibát kapok.
Itt a kódóm(Python kódról van szó)
szervák = "ABABABABAB"
#A játékos
A_Db = 0
A_Szerva_Pont = 0
A_Game = 0
A_Set = 0
#B játékos
B_Db = 0
B_Szerva_Pont = 0
B_Game = 0
B_Set = 0
#Deuce van-e?
Deuce = False
AktIndex = 0
#String bejárása
for szerva in szervák:
AktIndex+=1
if(szerva == "A"):
A_Db+=1
if(A_Db == 1):
A_Szerva_Pont = 15
if(A_Db == 2):
A_Szerva_Pont = 30
if(A_Db == 3):
A_Szerva_Pont = 40
if(szerva == "B"):
B_Db+= 1
if(B_Db == 1):
B_Szerva_Pont = 15
if(B_Db == 2):
B_Szerva_Pont = 30
if(B_Db == 3):
B_Szerva_Pont = 40
if(A_Db == 4 ):
A_Game+=1
A_Db = 0
A_Szerva_Pont = 0
B_Db = 0
B_Szerva_Pont = 0
if(B_Db == 4 ):
B_Game+=1
B_Db = 0
B_Szerva_Pont = 0
A_Db = 0
A_Szerva_Pont = 0
if(A_Szerva_Pont == 40 and B_Szerva_Pont == 40):
Deuce = True
if(Deuce == True):
if(szervák[AktIndex+1] == "A" and szervák[AktIndex+2] == "A"):
A_Game+= 1
A_Db = 0
A_Szerva_Pont = 0
B_Db = 0
B_Szerva_Pont = 0
Ne haragudj, nem vagyok biztos benne, hogy teljesen értem a játék menetét a leírásod alapján, így a logikai részben nem tudok segíteni perpillanat.
Az indexelésnél azzal van baj, hogy túliterálsz a sztringen.
Minden szép és jó azzal amit csinálsz, egészen az utolsó előtti elemig. Itt megkapja az AktIndex értéke az utolsó előtti elem indexét, az AktIndex+1 megkapja az utolsó elem indexét és az AktIndex+2 buktatja el ebben az esetben a kódot, mert nincs tovább lépni.
Az egyik lehetséges megoldás, hogy meghagyod ezt az indexelési módot, de beállítasz egy feltételt, hogy csak a string hossza - 2. elemig csinálja.
Az AktIndex helyett egyébként egyszerűbb a ciklust for i in range(len(szervák)) formára átírni, ebben az esetben pedig a szervák[i] fog megfelelni a szervának és könnyebb szervák[i+1]-ként megadni a következő elemet, extra változók bevezetése nélkül.
A másik lehetséges megoldás, hogy kicsit kiforgatod a klasszikus logikát és azt mondod, hogy oké, vizsgáljuk azt, ahol két azonos betű szerepel egymás mellett és annak adjunk pontot, akihez tartozik az a betű. De ebben nem vagyok biztos, mert nem teljesen értem a játék logikáját.
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!