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

VPS Starter Arubacloud
+1 głos
383 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 (251,210 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 (251,210 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 (251,210 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 134 wizyt
pytanie zadane 18 lipca 2018 w JavaScript przez mihalrudy Nowicjusz (200 p.)
–1 głos
1 odpowiedź 1,111 wizyt
pytanie zadane 20 maja 2017 w Python przez Eryk Chojnacki Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 222 wizyt
pytanie zadane 6 stycznia 2019 w JavaScript przez 42savage Bywalec (2,630 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...