Seite 1 von 1

Anfänger (Schere, Stein, Papier)

Verfasst: Sonntag 29. August 2021, 19:58
von Kampfgummibaerlie
Ich habe mir ein Buch gekauft, bin beim ersten Kapitel, wo ein Schere, Stein, Papier in der Maschine programmiert wird.

Jetzt habe ich das Problem, dass ich (quasi) nicht verlieren kann, weil er, falls ich verliere den Wert "None" zurückgibt, jedoch nicht die Message für ein Lose...

Hier mein bisheriger Code:

Code: Alles auswählen

"""
Rock - Paper - Scissor
"""
import random

ROCK = "r"
PAPER = "p"
SCISSORS = "s"

TIE = "Tie."
WIN = "You win :-)"
LOSE = "You lose :-("

def compare_moves(you, computer):
    if you == computer:
        return TIE
    elif you == SCISSORS and computer == PAPER:
        return WIN
    elif you == ROCK and computer == SCISSORS:
        return WIN
    elif you == PAPER and computer == ROCK:
        return LOSE
    
you = ""

while you not in [ROCK, PAPER, SCISSORS]:
    you = input("(r)ock, (p)aper or (s)cissors ? > ")

computer = random.choice([ROCK, PAPER, SCISSORS])
result = compare_moves(you, computer)

print(f"You: {you}, Computer: {computer}. {result}")
Freue mich, Python als nächstes in Erfahrung bringen zu dürfen!

LG Kampfgummibaerlie

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Sonntag 29. August 2021, 20:31
von sparrow
Eine Funktion gibt immer "None" zurück, wenn nicht explizit etwas zurückegegben wird.
Was genau bedeutet denn das letzte elif in deiner Funktion "compre_moves"?

Wenn ich deinen Gedanken richtig verstehe und du dir "if" und "elif" anschaust, solltest du auch über "else" stolpern.

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Sonntag 29. August 2021, 21:04
von Kampfgummibaerlie
Danke, genau das war der Fehler ;)

Das letzte Elif auf Else geändert, und funktioniert jetzt einwandfrei :D

Danke ;)

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Montag 30. August 2021, 06:11
von sparrow
Kampfgummibaerlie hat geschrieben: Sonntag 29. August 2021, 21:04Das letzte Elif auf Else geändert, und funktioniert jetzt einwandfrei :D
Dann zeig doch deinen Code jetzt einmal. Wenn du das letzte elif geändert hast, fehlt dir nun eine Kombination.

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Montag 30. August 2021, 08:56
von Kampfgummibaerlie
Mein Code sieht jetzt so aus:

Code: Alles auswählen

"""
Rock - Paper - Scissor
"""
import random

ROCK = "r"
PAPER = "p"
SCISSORS = "s"

TIE = "Tie."
WIN = "You win :-)"
LOSE = "You lose :-("

def compare_moves(you, computer):
    if you == computer:
        return TIE
    elif you == SCISSORS and computer == PAPER:
        return WIN
    elif you == ROCK and computer == SCISSORS:
        return WIN
    else:
        return LOSE
    
you = ""

while you not in [ROCK, PAPER, SCISSORS]:
    you = input("(r)ock, (p)aper or (s)cissors ? > ")

computer = random.choice([ROCK, PAPER, SCISSORS])
result = compare_moves(you, computer)

print(f"You: {you}, Computer: {computer}. {result}")
Danke für die Hilfen ;)

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Montag 30. August 2021, 09:19
von rogerb
Dann würde ich an deiner Stelle nie Papier wählen :)

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Montag 30. August 2021, 09:34
von rogerb
Alternative:

Code: Alles auswählen

def compare_moves(you, computer):
    return WIN if (you, computer) in [(PAPER, ROCK), (SCISSORS, PAPER), (ROCK, SCISSORS)] else LOSE

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Montag 30. August 2021, 09:59
von Kampfgummibaerlie
Sodala, jetzt (hoffe ich) es passt auch für euch ;)
Habe eine elif vergessen...

Mein jetziger Code sieht wie folgt aus:

Code: Alles auswählen

"""
Rock - Paper - Scissor
"""
import random

ROCK = "r"
PAPER = "p"
SCISSORS = "s"

TIE = "Tie."
WIN = "You win :-)"
LOSE = "You lose :-("

def compare_moves(you, computer):
    if you == computer:
        return TIE
    elif you == SCISSORS and computer == PAPER:
        return WIN
    elif you == ROCK and computer == SCISSORS:
        return WIN
    elif you == PAPER and computer == ROCK:
        return WIN
    else:
        return LOSE
    
you = ""

while you not in [ROCK, PAPER, SCISSORS]:
    you = input("(r)ock, (p)aper or (s)cissors ? > ")

computer = random.choice([ROCK, PAPER, SCISSORS])
result = compare_moves(you, computer)

print(f"You: {you}, Computer: {computer}. {result}")
LG Kampfgummibaerlie ;)

EDIT: Ich möchte langsam (und nach dem Buch, und natürlich eurer Unterstützung ^^) die Sprache lernen, also noch nichts zu komplexes bitte

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Montag 30. August 2021, 11:10
von /me
rogerb hat geschrieben: Montag 30. August 2021, 09:34

Code: Alles auswählen

def compare_moves(you, computer):
    return WIN if (you, computer) in [(PAPER, ROCK), (SCISSORS, PAPER), (ROCK, SCISSORS)] else LOSE
Da fehlt das "Unentschieden".

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Montag 30. August 2021, 11:36
von rogerb
/me hat geschrieben: Montag 30. August 2021, 11:10 Da fehlt das "Unentschieden".
Stimmt!

Code: Alles auswählen

def compare_moves(you, computer):
    if you == computer:
        return TIE
    elif (you, computer) in {(PAPER, ROCK), (SCISSORS, PAPER), (ROCK, SCISSORS)}:
        return WIN
    else:
        return LOSE

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Donnerstag 30. September 2021, 08:48
von __blackjack__
Noch eine überarbeitete Version in der ein bisschen Redundanz herausgenommen ist, nämlich dass die Anfangsbuchstaben der Gegenstände unabhängig an zwei Stellen im Quelltext stehen. Dann habe ich aus der ``while``-Schleife wo vor der Schleife eine Variable mit einem Dummy-Wert belegt wird, eine nachprüfende Schleife gemacht. Und wir sehen den bedingten Ausdruck in `compare_moves()`, sowie „dict comprehension“-Syntax und ein Beispiel für die ``assert``-Anweisung:

Code: Alles auswählen

#!/usr/bin/env python3
"""
Rock - Paper - Scissor
"""
import random

CHOICES = ROCK, PAPER, SCISSORS = "rock", "paper", "scissors"
LETTER_TO_CHOICE = {choice[0]: choice for choice in CHOICES}
assert len(CHOICES) == len(LETTER_TO_CHOICE), "choice letters not unique"

WINNING_COMBINATIONS = {(PAPER, ROCK), (SCISSORS, PAPER), (ROCK, SCISSORS)}

TIE = "Tie."
WIN = "You win :-)"
LOSE = "You lose :-("


def format_as_option(text):
    return f"({text[0]}){text[1:]}"


def compare_moves(you, computer):
    if you == computer:
        return TIE
    else:
        return WIN if (you, computer) in WINNING_COMBINATIONS else LOSE


def main():
    prompt = "{}? > ".format(", ".join(map(format_as_option, CHOICES)))
    while True:
        you = LETTER_TO_CHOICE.get(input(prompt))
        if you is not None:
            break

    computer = random.choice(CHOICES)
    result = compare_moves(you, computer)

    print(f"You: {you}, Computer: {computer}. {result}")


if __name__ == "__main__":
    main()

Re: Anfänger (Schere, Stein, Papier)

Verfasst: Samstag 2. Oktober 2021, 18:05
von Assassin4711

EDIT: Ich möchte langsam (und nach dem Buch, und natürlich eurer Unterstützung ^^) die Sprache lernen, also noch nichts zu komplexes bitte
Welches Buch hast du genommen?