• 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
473 wizyt
pytanie zadane 11 października 2021 w Python przez Hajpa Użytkownik (910 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 (910 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 (255,840 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 (255,840 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 (255,840 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 152 wizyt
pytanie zadane 18 lipca 2018 w JavaScript przez mihalrudy Nowicjusz (200 p.)
–1 głos
1 odpowiedź 1,277 wizyt
pytanie zadane 20 maja 2017 w Python przez Eryk Chojnacki Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 267 wizyt
pytanie zadane 6 stycznia 2019 w JavaScript przez 42savage Bywalec (2,630 p.)

93,018 zapytań

141,982 odpowiedzi

321,283 komentarzy

62,365 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...