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

0 głosów
510 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ź 313 wizyt
pytanie zadane 8 sierpnia 2018 w C i C++ przez Krzymado Początkujący (370 p.)
0 głosów
0 odpowiedzi 740 wizyt
pytanie zadane 9 lutego 2022 w C i C++ przez CheF123 Początkujący (450 p.)

93,632 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...