Akasztófa (feladvány szótárból)
A megoldás menete
Ebben a feladatban az alapjátékot bővítjük úgy, hogy a számítógép egy szótárból véletlenszerűen válasszon feladványt.
#1.
Első lépésként hozzunk létre egy szotar.txt
nevű szöveges állományt ugyanabban a mappában, amiben a forráskódunk is van! Az állományba írjunk be tetszőleges számú szót, soronként egyet, majd mentsük el!
almafa
kajszibarack
narancs
cukkini
burgonya
Annak érdekében, hogy a program minden fejlesztőkörnyezetben fusson, célszerű olyan szavakat választani, amikben nincsenek ékezetes magánhangzók. Ha megbizonyosodtunk róla, hogy az ékezetes magánhangzók nem okoznak programhibát, akkor természetesen olyan szavakat is lehet használni.
#2
Az alapjátékban megírt programkód legelején hozzunk létre egy új sort, és egészítsük ki azt egy rövid kódrészlettel!
Nyissuk meg az előbb létrehozott állományt, hogy a program számára olvasható legyen! Az "r"
kapcsolóval tudjuk jelezni, hogy csak olvasni szeretnénk az állományt, írni nem.
szotar = open("szotar.txt", "r")
Hozzunk létre egy változót, és olvassuk be az állomány tartalmát!
szavak = szotar.readlines()
A szavak nevű változónk tartalmazza a szótárban található szavak listáját. Ebből fogunk véletlenszerűen választani egyet.
Importáljuk a random
csomagot, majd generáljunk egy véletlen számot! A megfelelő intervallum megadásához kérjük le, hogy hány elemű a szavak nevű listánk!
import random
veletlen = random.randint(0, len(szavak)-1)
Ne felejtsük el, hogy a Python a sorszámozást nem 1-től, hanem 0-tól kezdi! Ha a szótárunk öt szót tartalmaz, azok 0-tól 4-ig lesznek sorszámozva.
Végül válasszuk ki a listánk véletlenedik elemét, és adjuk értékül a feladvány változónak!
feladvany = szavak[veletlen]
Mivel a Python a szótár beolvasásakor a sorvégi entereket is megőrzi, minden szó egy karakterrel hosszabb lesz. Ezt az entert a strip()
függvény segítségével tudjuk eltávolítani.
feladvany = szavak[veletlen].strip()
A teljes kód
szotar = open("szotar.txt", "r")
szavak = szotar.readlines()
import random
veletlen = random.randint(0, len(szavak)-1)
feladvany = szavak[veletlen].strip()
megfejtes = list("_" * len(feladvany))
elet = 10
print(f"{''.join(megfejtes)}")
while True:
print()
tipp = input("Tipp: ")
talalt = False
for sorszam, betu in enumerate(feladvany):
if betu == tipp:
megfejtes[sorszam] = tipp
talalt = True
if talalt == False:
elet -= 1
print(f"{''.join(megfejtes)}")
if ''.join(megfejtes) == feladvany:
print(f"Helyes megoldas!")
break
if elet == 0:
print(f"Sajnos vesztettel!")
print(f"A helyes megfejtes: {feladvany}")
break