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

+1 głos
81 wizyt
pytanie zadane 11 października w Python przez Hajpa Użytkownik (660 p.)
edycja 13 października 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 przez Inn Gaduła (3,660 p.)
answer = input()

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

 

komentarz 12 października przez Hajpa Użytkownik (660 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 przez Inn Gaduła (3,660 p.)
edycja 12 października 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 przez VBService VIP (137,370 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 przez Inn Gaduła (3,660 p.)
Tak tak, pomyłka w mojej strony.
0 głosów
odpowiedź 11 października przez VBService VIP (137,370 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 przez Inn Gaduła (3,660 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 przez VBService VIP (137,370 p.)
edycja 12 października 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 92 wizyt
pytanie zadane 18 lipca 2018 w JavaScript przez mihalrudy Nowicjusz (200 p.)
–1 głos
1 odpowiedź 488 wizyt
pytanie zadane 20 maja 2017 w Python przez Eryk Chojnacki Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 173 wizyt
pytanie zadane 6 stycznia 2019 w JavaScript przez 42savage Bywalec (2,630 p.)

85,802 zapytań

134,588 odpowiedzi

298,789 komentarzy

56,697 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 494p. - rucin93
  2. 482p. - CC PL
  3. 463p. - nidomika
  4. 385p. - Whistleroosh
  5. 379p. - ScriptyChris
  6. 372p. - adrian17
  7. 340p. - TheLukaszNs
  8. 339p. - WhiskeyTaster
  9. 321p. - Argeento
  10. 318p. - Dagohar
  11. 287p. - Anonim 1794483
  12. 281p. - Klaudia
  13. 278p. - B4mbus
  14. 269p. - b0mbix
  15. 246p. - tokox
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 dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...