Punkty w grze "wisielec"

Punkty w grze "wisielec"
fornakter
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
#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:

Kopiuj
słowo: aaaa
wprowadze: a
pkt - 0

wprowadze: b
pkt - 4

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

R3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 419
1

można tak

Kopiuj
            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
tauruss
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 53
1

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

Kopiuj
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.

Wizzie
  • Rejestracja: dni
  • Ostatnio: dni
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 :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.