Néhány hete elkezdtem tanilni Python nyelven. Csináltam egy scriptet, a gondom az, hogy bár látszólag működik, ha sokszor próbálgatom, van, hogy nem írja ki a választ, csak bekéri az inputot újra, és nem jövök rá miért. Szerintetek?
import random
def kopapirollo():
return random.choice(["kő","papír","olló"])
valid_options=("kő","KŐ","Ko","KO","ko")
valid_options1=("Papír","PAPÍR","papír","papir")
valid_options2=("ollo","olló","Olló","Ollo","OLLÓ")
print('kő-papír-olló-kilépéshez írjba be: "kilép"')
while True:
valasz=input("Kő/Papír/Olló? ")
if valasz in valid_options:
kopapirollo()
if kopapirollo()=="papír":
print("Ön vesztett")
elif kopapirollo()=="kő":
print("Döntetlen")
elif kopapirollo()=="olló":
print("Ön nyert")
elif valasz in valid_options1:
kopapirollo()
if kopapirollo()=="papír":
print("döntetlen")
elif kopapirollo()=="kő":
print("Ön nyert")
elif kopapirollo()=="olló":
print("Ön vesztett")
elif valasz in valid_options2:
kopapirollo()
if kopapirollo()=="papír":
print("Ön nyert")
elif kopapirollo()=="kő":
print("Ön vesztett")
elif kopapirollo()=="olló":
print("Döntetlen")
@sédoiglskdjfgélksdjf
Hát a tiéd sem sokkal jobb. Az övén legalább lehet látni hogy mit akar csinálni. Amellett hogy az angollal problémáid vannak (rock-paper-scissors a játék neve és a döntetlen nem tide hanem tie vagy draw), ezektől a concatos, castolós, hackelős megoldásoktól feláll a szőr a hátamon. Akkor legalább valami ilyesmit írj:
result = (player - computer) % 3
if result == 0:
. . print('draw')
elif result == 1:
. . print('win')
else:
. . print('loss')
@sédoiglskdjfgélksdjf: Vak vezet világtalant, ugyanis a te megoldásodhoz hasonló gányságot is ritkán látni.
1. Miért nem from random import randint?
2. Te komolyan definiáltál egy függvényt ami annyit csinál, hogy meghívja a randint(1, 3)-at?
3. Miért kell két sorra bontani az input és lower hívásokat?
4. A userInput in kpo_dict.keys() felesleges bonyolítása a userInput in kpo_dict-nek. Amúgy a mixedCase és aláhúzásos változók vegyítése csúnya, a mixedCase konkrétan ellenjavallott.
5. Amúgy is felesleges csekkolgatni hogy mi van benne a szótárban és mi nincs, szebb bevenni az "exit" kulcsot 4-es értékkel (hiszen azt a szót is értelmezed), és kpo_dict.get(userInput, 0)-val elejét venni a pö-csörészésnek. 0-ra újrakéred, 4-re kilépsz, a többire meg játszol.
6. A stringes-intes gányolástól szóhoz sem jutok. De ha már mindenképp ilyen idióta megoldást akarsz használni, miért nem 10*x + y?
7. Ez a moduló 11-es cucc annyira szar hogy szinte már jó. Kreativitásnak nem vagy híján, az biztos. Amúgy ha már egyszer ismered a modulót, használhattad volna a #11-es ötletét, esetleg kiegészítve egy ifezgetés nélküli, közvetlen kifejezéssel, pl. print ("draw", "win", "loss")[(player - computer) % 3], a tuple-t az olvashatóság kedvéért esetleg kiemelve.
8. A flagezgetés felesleges, while kpo(): pass is megteszi.
Na ezért nem szép dolog kinevetni a kezdőt az első szárnypróbálgatásaiért.
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!