Problem z pętlą while

0

Cześć wszystkim,
Dopiero zaczynam swoją przygodę z programowaniem i mam drobny problem.. Zależy mi na tym, aby przy "złej" odpowiedzi program się zapętlał z infromacją "spróbuj ponownie".
Powiecie mi proszę, gdzie popełniłem błąd i dlaczego program nie działa jak powninen?

print("Witamy w programie: 'Jaka to liczba?'")
print("Wybierz liczbę, jeśli się nie uda, proszę próbować do skutku")
a = ""
while not a:
    a = input("zgaduj jaką wybrałem liczbę: ")
    if a == "25":
        print("Zgadłeś")
    elif a == "31":
        print("również zgadłeś")
    else:
        b=input("Spróbuj ponownie: ")

input("Naciśnij enter, aby zamknąć program")
1

Konstrukcja while wygląda, jakbym oczekiwany typ zmiennej 'a' był logiczny, coś podobnego piszesz w opisie (dobry / zły)
Ale w pozostałym kodzie traktujesz 'a' jako zmienną tekstową
Zmieniam Twoje 'a' na 'isOK' (tak na przyszłość, dobre nazwy zmiennych bardzo pomagają) i powołuję drugą zmienną b. Zostawiam przyjemność ustawienia zmiennej

print("Witamy w programie: 'Jaka to liczba?'")
print("Wybierz liczbę, jeśli się nie uda, proszę próbować do skutku")
IsOK= False
while not IsOK:
    b = input("zgaduj jaką wybrałem liczbę: ")
    if b == "25":
        print("Zgadłeś")
        IsOK = ..... 
    elif b == "31":
         IsOK = ....
        print("również zgadłeś")
    else:
            IsOK = ....
        b=input("Spróbuj ponownie: ")

input("Naciśnij enter, aby zamknąć program")
0

@ZrobieDobrze:

Acha ... na minus, że w ogóle wlazłeś w problem z typami zmiennych, to uroda Pythona i podobnych języków (PHP, JS, z innych powodów i w innym sensie C/C++)

W takiej np Javie czy C# napis (string) jest niekompatybilny z typem logicznym, i to by się nawet nie skompilowało. Nadmierna kompatybilność wszelkich typów z logicznym (boolean) wcale nie jest miła ...

w Pythonie trzeba "ręcznie" uważać.

39

while działa na podstawie warunku i dopóki jest on spełniony, pętla będzie się powtarzać. W Twoim przypadku nie spełnia się po pierwszej iteracji, gdyż zmienna a przestaje być pusta.
Zamiast tego lepiej stworzyć zmienna, która będzie trzymała wynik porównania obu liczb.

A najprościej zrobić to tak, bez żadnych dodatkowych zmiennych.

liczba = 5
while True:
    if guess := input("podaj liczbe: ") == str(liczba):
        print("Wygrales talon...")
        break
    print("Sprobuj ponownie...")

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