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

Pętla IF i wprowadzenie prawidłowego znaku.

Object Storage Arubacloud
+1 głos
400 wizyt
pytanie zadane 11 października 2021 w Python przez Hajpa Użytkownik (880 p.)
edycja 13 października 2021 przez Hajpa

Witam ponownie!

 

Cchciałbym żeby użytkownik odpowiedział na pytanie i wpisał t/n. Wszystko jest OK pod warunkiem, że wprowadzone jest t lub n. Program wyświetla True lub False, ale niestety program przyjmuje też klawisze inne niż t i n.

Jak zrobić pętle, żeby przyjmowała tylko t lub n?

 

Dziękuję i pozdrawiam.

 

O take coś mi chodziło:

Moim zdaniem bardzo ładny kod :)

Dzięki GZ!

 

answer = "" 
while answer != "t" and answer != "n": 
    answer = input("t/n") 
    if answer == "t": 
        print("tak") 
    elif answer == "n": 
        print("nie") 
    else: 
        print("Try again.") 

 

2 odpowiedzi

0 głosów
odpowiedź 11 października 2021 przez Inn Gaduła (4,300 p.)
answer = input()

while answer != 't' and answer != 'n':
    print('Try again')
    answer = input()
    
print('Done')

 

komentarz 12 października 2021 przez Hajpa Użytkownik (880 p.)

Przy wprowadzeniu znaku innego niż t i n program wchodzi w nieskonczoną pętlę i nie daje możliwości ponownego wprowadzenia znaku.

Trochę to zmodyfikowałem na swój użytek, ale to nie działa tak jakbym chciał.

Pytanie, jak zrobić żeby po wprowadzeniu nieprawidłowego znaku pojawił się ponownie komunikat o dozwolonych znakach i program czekał na ich wprowadzenie?

answer = input("t/n")
while answer != 't' and answer != 'n': print('Try again')
if answer == "t":
	print("tak")
else:
	print("nie")

 

komentarz 12 października 2021 przez Inn Gaduła (4,300 p.)
edycja 12 października 2021 przez Inn

Wydaje mi się, że wycinek kodu który Ci podałem działa właśnie tak jak chciałbyś żeby działał albo źle opisujesz swój problem.

Fragment kodu który wysłałeś wchodzi w nieskończoną pętlę ponieważ w jej wnętrzu nie dajesz użytkownikowi możliwości ponownego wprowadzenia danych, rozwiązaniem jest dodanie w pętli drugiej funkcji input.

Jeśli dalej występuje jakiś problem to pisz, coś zaradzimy :)

komentarz 12 października 2021 przez VBService Ekspert (252,780 p.)

rozwiązaniem jest dodanie w pętli drugiej funkcji print.

chyba chodzi o dodanie

input("t/n")

 

answer = input("t/n: ")
while answer != 't' and answer != 'n': 
    print('Try again')
    answer = input("t/n: ")

if answer == "t":
    print("tak")
else:
    print("nie")

 

1
komentarz 12 października 2021 przez Inn Gaduła (4,300 p.)
Tak tak, pomyłka w mojej strony.
0 głosów
odpowiedź 11 października 2021 przez VBService Ekspert (252,780 p.)

Możesz "zrobić" listę dozwolonych znaków. ( pierwsza litera z answer => answer[0] )

 

Przykład  ( on-line )

answer = input()
allowed = ['t', 'T', 'n', 'N']
 
while answer[0] not in allowed:
    print('Try again')
    answer = input()
     
print(f"Your choice: {answer[0]}")

komentarz 12 października 2021 przez Inn Gaduła (4,300 p.)

Jak zrobić pętle, żeby przyjmowała tylko t lub n?

Jest to również dobre rozwiązanie o ile kolega chciałby zezwolić użytkownikowi na wprowadzenie więcej niż jednego znaku.

answer = input()
allowed = ['t', 'n']
  
while answer.lower() not in allowed:
    print('Try again')
    answer = input()
      
print(f"Your choice: {answer}")

Osobiście wołałbym takie rozwiązanie, bez zezwalania na więcej niż jeden znak, chyba, że ten znalazłby się w liście znaków oraz ciągów dozwolonych.

komentarz 12 października 2021 przez VBService Ekspert (252,780 p.)
edycja 12 października 2021 przez VBService

W tej postaci

answer = input()

input i tak zezwala użytkownikowi na podanie ciągu znaków, trick polega na tym, że czytany jest pierwszy znak z zadanego ciągu.

answer[0]

czy poda jedną literę czy więcej nie ma znaczenia brana jest pod uwagę pierwsza.

 

czyli

while answer[0].lower() not in ['t', 'n']:

lub

answer = input()[0]

while answer.lower() not in ['t', 'n']:
    print('Try again')
    answer = input()[0]
       
print(f"Your choice: {answer}")

 

P.S.  jeżeli to ma być coś np. na wzór z C#

Console.ReadKey().KeyChar;

How to read a single character from user - python?

Podobne pytania

0 głosów
2 odpowiedzi 136 wizyt
pytanie zadane 18 lipca 2018 w JavaScript przez mihalrudy Nowicjusz (200 p.)
–1 głos
1 odpowiedź 1,134 wizyt
pytanie zadane 20 maja 2017 w Python przez Eryk Chojnacki Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 229 wizyt
pytanie zadane 6 stycznia 2019 w JavaScript przez 42savage Bywalec (2,630 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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!

...