If-Bedingung wird ignoriert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
KeozFPV
User
Beiträge: 12
Registriert: Montag 12. Juli 2021, 19:18

Hallo, ich habe das Problem das ich zwei if Anweisungen in meinem Code habe, die egal ob die Bedingungen stimmen (true) oder falsch (false) sind ausgeführt werden. Ich habe meinen Code mit dem von anderen verglichen und finde keinen Fehler den ich gemacht habe.
Außerdem wird meine Zuweisung einer Variable durch "... = input('...')" ignoriert.
Dies soll ein Tic Tac Toe spiel werden.

Code: Alles auswählen

global starting_player
starting_player = "null"    #welcher spieler ist an der Reihe

global stopvar  #whileloop
stopvar = 1

global playerinput
playerinput = 0






def menu ():
    starting_player = input("Welcher spieler soll anfangen? X oder O:")

    if starting_player == "X" or "O":
        while stopvar == 1:
            game()
    if starting_player != "X" or "O":
        print('Falsche Eingabe.')
        menu()




def game ():
    playerinput = input('Bitte gebe deine Wahl ein "' + starting_player + '":')
    if playerinput == range(9):
        print("hello")

menu()
Ich habe schon einiges probiert, weiß aber nicht weiter. Ich bin ein kompletter Anfänger, deswegen entschuldige ich mich.
Vielen dank im voraus, Gruß Jakob.
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

die 'if'-Abfrage sollte dann so aussehen:

Code: Alles auswählen

if starting_player == "X" or starting_player == starting_player == "O":
Bitte verwende von Anfang an kein 'global'. Du musst lernen wie du Argumente an Funktionen übergibst und wie Funktionen Rückgabewerte entgegen nehmen.
Schau dir am besten mal dieses Tutorial an:
https://docs.python.org/3/tutorial/

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
KeozFPV
User
Beiträge: 12
Registriert: Montag 12. Juli 2021, 19:18

Dankeschön.
Das mit dem
if starting_player == "X" or starting_player == "O":
macht sinn. Das ist mir aber nicht als Fehler aufgefallen. und ich verstehe aber immer noch nicht wieso er das dann als True gewertet hat.
Und bei den Rückgaben muss ich mich nochmal reinlesen.
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Ein String ist immer True.
Sprich wenn du den ersten Teil der 'if'-Abfrage weglässt, dann steht da nur noch 'if 'O':' und das ist True. Python weis nicht ob du 'O' abfragen willst oder ob du das 'O' auch auf den 'starting_player' beziehst, wenn du es nicht direkt sagst.

Teste es einfach mal

Code: Alles auswählen

test_sring = 'O'
if O:
    print('O ist immer True)
if test_string == 'X':
    print('False')
'False' wird im Terminal nicht erscheinen, da die 'if'-Abfrage im Gegensatz zur ersten nicht immer True ist.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kleine Korrektur: Eine nicht-leere Zeichenkette ist immer ”wahr”. Eine leere Zeichenkette ist ”unwahr”:

Code: Alles auswählen

In [225]: bool("Hallo")                                                         
Out[225]: True

In [226]: bool("")                                                              
Out[226]: False
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@KeozFPV: wenn man eine if-Bedingung hat, und danach gleich eine die das genaue Gegenteil des ersten if`s ist, dann benutzt man else.
Rekursion ist kein Ersatz für eine richtige Schleife.
In `game`: ein String kann niemals gleich einem Range-Objekt sein.
Eine Funktion, die `menu` heißt, sollte nicht gleich das ganze Spiel umfassen. Eine Funktion hat immer genau eine Aufgabe.

Code: Alles auswählen

def menu():
    while True:
        starting_player = input("Welcher spieler soll anfangen? X oder O:")
        if starting_player in ["X", "O"]:
            break
        print('Falsche Eingabe.')
    return starting_player


def play_round(player)
    playerinput = int(input(f'Bitte gebe deine Wahl ein {player}:'))
    if 1 <= playerinput <= 9:
        print("hello")

def game():
    starting_player == menu()
    while True:
        play_round(starting_player)

if __name__ == "__main__":
    game()
KeozFPV
User
Beiträge: 12
Registriert: Montag 12. Juli 2021, 19:18

Dennis89 hat geschrieben: Freitag 10. September 2021, 18:37
Oh ok. Das macht Sinn. Wie schon geschrieben bin Anfänger und muss erst mal richtig in die Materie kommen. Danke für deine Mühe das mir zu erklären. :)
KeozFPV
User
Beiträge: 12
Registriert: Montag 12. Juli 2021, 19:18

@Sirius3

Ok, danke. :)
Hab auch schon einiges verbessert. Bin jetzt mit meinem "Projekt" fertig. Müsste alles behoben sein. ;D
Danke für deine Mühe!
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@KeozFPV: bist Du ja offensichtlich nicht, da Du bei Deinem "Projekt" das hier beschriebene gar nicht umgesetzt hast.
Antworten