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

question-closed Python warunek w ifie

Mały hosting, OGROMNE możliwości
0 głosów
418 wizyt
pytanie zadane 16 kwietnia 2022 w Python przez niezalogowany
zamknięte 16 kwietnia 2022
import random
def gra():

    my_number = random.randint(0, 100)
    guess = -1
    print("Guess my nmebr")


    while guess != my_number:
        guess = int(input("Wprowadż liczbę"))
        if guess != my_number:
            o = input("Podałeś nieprawidłóową liiczbę poddajes zs ę> napisz tak lub nie")
      
        if o == 'Tak' or 'TAK' or 'tak' or 'tAk' or 'taK' or 'TaK':
            print("Wylosowana liczba to", my_number)
            break
        if o == 'Nie' or 'NIE' or 'NiE' or 'nie' or 'NIe' or 'nIE':
            
            print("okej")
        return

gra()

ok = input("Chcesz grać dalej?")
while ok == 'Tak' or 'tak':
    gra()


print("Okej")

 

Nie wiem dlaczego warunek w ifie w którym jest instrukcja print("Wylosowana liczba to", my_number) się spełnia kiedy w zmienna o jest 'Nie'

Przecież Nie nie jest równe Tak.

komentarz zamknięcia: rozwiązanie

1 odpowiedź

0 głosów
odpowiedź 16 kwietnia 2022 przez adrian17 Mentor (354,880 p.)
if o == 'Tak' or 'TAK' or 'tak' or 'tAk' or 'taK' or 'TaK':

Pomieszałeś kolejność wykonywania działań - `or` rozdziela wyrażenia logiczne. Więc to nie oznacza "czy o jest tekstem 'Tak' czy tekstem 'TAK'" tylko jednym warunkiem jest "czy o jest tekstem 'Tak'", drugim warunkiem jest 'TAK', trzecim warunkiem jest 'tak'... co oczywiście jest błędne. Warunek który jest niepustym tekstem jest zawsze prawdziwy.

Powinieneś albo (w kolejności od prostych poprawek do coraz bardziej idiomatycznego kodu):

- poprawić linię żeby każde wyrażenie po każdej stronie 'or' było osobnym porównaniem z ==,

- zastąpić ciąg 6 porównań z jednym sprawdzeniem czy tekst jest w liście ['Tak', 'TAK', 'tak' etc],

- po prostu zamienić tekst wejściowy na małe litery - wtedy wystarczy jedno porównanie z 'tak'.

komentarz 16 kwietnia 2022 przez niezalogowany

zmodyfikowałem kod i nadal nie działa tak jak powinien

import random
tak = ['tak','TAK','TaK','tAK','tAk','taK']
nie = ['Nie','NIE','NiE','nie','NIe','nIE']
def gra():
    tak = ['tak','TAK','TaK','tAK','tAk','taK']
    nie = ['Nie','NIE','NiE','nie','NIe','nIE']
    my_number = random.randint(0, 100)
    guess = -1
    print("Guess my nmebr")


    while guess != my_number:
        guess = int(input("Wprowadż liczbę"))
        if guess != my_number:
            o = input("Podałeś nieprawidłóową liiczbę poddajes zs ę> napisz tak lub nie")
      
        if o == tak:
            print("Wylosowana liczba to", my_number)
            break
        if o == nie:
            print("okej")
        return

gra()
ok = input("Chcesz grać dalej?")
while ok == taks:

    gra()


print("Okej")

 

Podobne pytania

0 głosów
2 odpowiedzi 800 wizyt
pytanie zadane 27 lutego 2023 w Python przez niezalogowany
0 głosów
1 odpowiedź 1,190 wizyt
0 głosów
5 odpowiedzi 1,257 wizyt
pytanie zadane 19 marca 2016 w C i C++ przez luparuwka Początkujący (400 p.)

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,262 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...