• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Te same warunki w instrukcji if oraz pętli while, a inne efekty.

Object Storage Arubacloud
0 głosów
284 wizyt
pytanie zadane 2 listopada 2018 w Python przez niezalogowany

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.

2 odpowiedzi

+1 głos
odpowiedź 2 listopada 2018 przez jeremus Maniak (59,720 p.)
wybrane 2 listopada 2018
 
Najlepsza
skoro wczytujesz zmienną typu integer to w typie wyliczeniowym tez użyj integer  a nie stringów - czyli  [0,1,2]
0 głosów
odpowiedź 2 listopada 2018 przez X3h Dyskutant (9,540 p.)
choice = 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")
print("no no gratuluje")

 

Podobne pytania

0 głosów
1 odpowiedź 178 wizyt
pytanie zadane 8 sierpnia 2018 w C i C++ przez Krzymado Początkujący (370 p.)
0 głosów
0 odpowiedzi 486 wizyt
pytanie zadane 9 lutego 2022 w C i C++ przez CheF123 Początkujący (450 p.)

92,573 zapytań

141,423 odpowiedzi

319,647 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...