Akasztófa (feladvány szótárból)

🔖 random 🔖 file 🔖 list 🔖 for

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