Punkty w grze "wisielec"

0

Witam.
Męczę się od paru dni i nie mogę znaleźć rozwiązania na prawidłową punktację (odejmowanie ich)
Zaznaczam od razu, że program piszę w ramach praktyk, dlatego kod może wyglądać dla niektórych ułomnie :)
Mam nadzieję, że ten wycinek kodu wystarczy:

#a - wprowadzona litera przez uzytkownika
#sl - zawiera słowo, które trzeba zgadnąć, na początku jest wypełniane "pustymi" znakami: _
#tab - alfabet, ktory jest wyswietlany, podane litery znikaja
# pkt - punkty ;)
for pozycja, litera in enumerate(slowa[rand]): # Szukanie litery w slowie
            if litera == a:
                sl[pozycja] = a
                tab[pozycja] = " " 
            elif litera != a:
                pkt -= 1

Podany kod wstawia w "puste" miejsce znak, jezeli wystepuje w slowie (mówiąc w skrócie: wykonuje swój obowiązek)
W komendzie elif chciałem, żeby odejmował 1 pkt jeżeli popełniliśmy błąd. Jednak jest odejmowany tyle razy punkt, ile brakuje liter w słowie.
Czyli:

słowo: aaaa
wprowadze: a
pkt - 0

wprowadze: b
pkt - 4

Czyli wiem w czym problem, ale nie wiem jak go rozwiązać

1

można tak

            odjete_raz = False
            for pozycja, litera in enumerate(slowa[rand]): # Szukanie litery w slowie
            if litera == a:
                sl[pozycja] = a
                tab[pozycja] = " " 
            elif litera != a:
                if not odjete_raz:
                    odjete_raz = True
                    pkt -= 1
1

Musisz "wyjąć" poza pętlę odejmowanie wyniku.

litera_w_slowie = False
for pozycja, litera in enumerate(slowa[rand]): # Szukanie litery w slowie
    if litera == a:
        sl[pozycja] = a
        tab[pozycja] = " "
        litera_w_slowie = True

if litera_w_slowie == False:
    pkt -=1

Czyli dodajemy flagę, która określa czy w całym przebiegu pętli znaleziono choć jedną literę w wyrazie i jeżeli nie, to odejmuje punkt.

1

Jednak jest odejmowany tyle razy punkt, ile brakuje liter w słowie.

To logiczne, przecież po sprawdzeniu warunku litera != a twoja pętla leci sobie dalej. Użyj słowa kluczowego break do przerwania pętli.

Poza tym, nie skracaj nazw zmiennych, sam widzisz, że musisz je wyjaśniać w komentarzach, łatwiej i krócej jest dać im normalne nazwy. No i pisząc kod używamy nazw w języku angielskim :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1