• 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

HackNation - ogólnopolski hackathon
0 głosów
360 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,800 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 676 wizyt
pytanie zadane 27 lutego 2023 w Python przez niezalogowany
0 głosów
1 odpowiedź 1,035 wizyt
0 głosów
5 odpowiedzi 1,166 wizyt
pytanie zadane 19 marca 2016 w C i C++ przez luparuwka Początkujący (400 p.)

93,608 zapytań

142,531 odpowiedzi

323,004 komentarzy

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

Kursy INF.02 i INF.03
...