Cześć, podczas nauki zapragnąłem napisać swój krótki interfejs w Pythonie. Chciałem, żeby użytkownik wybrał cyfrę od 0 do 2 oraz został każdorazowo skarcony za podanie liczby z innego przedziału, albo w ogóle jakiś inny znak, lub jego ciąg. Pierwszy problem jaki napotkałem to taki, że pętla while karci za pierwszym razem nawet te cyfry, które są z dobrego przedziału. Kod wyglądał tak:
choice = int(input("\n\t Wybierz cyfrę"))
while choice not in ["0", "1", "2"]:
print("no niestety, ale", choice, "nie jest cyfrą od 0 do 2")
choice = input("\n\t WYBIERZ TUTAJ CYFRĘ Z PRZEDZIAŁU OD 0 DO 2")
Wiem, że warunek w pętli kończy pętle, a nie ją rozpoczyna, więc postanowiłem użyć instrukcji if przed pętlą, żeby nie przepuszczała za pierwszym razem tego dobrego wyniku. Dałem dokładnie ten warunek, który działa dobrze przy pętli while:
choice = int(input("\n\t Wybierz cyfrę"))
if choice not in ["0", "1", "2"]:
while choice not in ["0", "1", "2"]:
print("no niestety, ale", choice, "nie jest cyfrą od 0 do 2")
choice = input("\n\t WYBIERZ TUTAJ CYFRĘ Z PRZEDZIAŁU OD 0 DO 2")
else:
print("no no gratuluje")
No i intrukcja if przepuszcza wszystko jak leci, a to za sprawą chyba złego zapisu warunku, bo gdy zmieniłem na:
choice = int(input("\n\t Wybierz cyfrę"))
if choice != 0:
while choice not in ["0", "1", "2"]:
print("no niestety, ale", choice, "nie jest cyfrą od 0 do 2")
choice = input("\n\t WYBIERZ TUTAJ CYFRĘ Z PRZEDZIAŁU OD 0 DO 2")
else:
print("no no gratuluje")
To warunek działa dobrze, wprawdzie nie chodziło mi o to, ale to tylko tak dla sprawdzenia. Czy ktoś mógłby mi powiedzieć dlaczego ta instrukcja if nie działa tak jakbym chciał, pomimo identycznego zapisu jak w pętli, plus może pouczyć w jaki lepszy sposób mógłbym osiągnąć swój cel, bo nie wiem czy to co napisałem idzie zgodnie z myślą o klarowności kodu w Pythonie.