Sten, sax, påse spel i python

Permalänk
Medlem

Sten, sax, påse spel i python

Hej på er alla!

Jag håller på med en skoluppgift där vi ska programmera ett sten, sax, påse spel i python. Vi ska lagra spelaren val i variabeln "user" och datorns val i variabeln "computer" och en funktion "checkResults" ska ta dessa värden och avgöra vem som vinner en omgång. Jag undrar nu hur jag ska kunna integrera funktionen i while loopen och få den att upprepa spelet tills någon har vunnit ?

Hoppas ni förstod min lite otydliga fråga

Här är min färdigt skapade python kod,

points_to_win = int(input("Hur många poäng behövs för att vinna ? "))

user_points = 0
computer_points = 0

user = int(input("Gör ditt val: \n1:Sten \n2:Sax \n3:Påse \n> "))
computer = random.randint(1,3)

def checkResults(user,computer):
while user_points < points_to_win or computer_points < points_to_win:
if user == 1:
if computer == 1:
print("Oavgjort")
elif computer == 2:
print("Datorn valde sax, du valde sten. Du vann")
user_points += 1
else:
print("Datorn valde påse, du valde sten. Datorn vann")
computer_points += 1
elif user == 2:
if computer==1:
print("Datorn valde sten, du valde sax. Datorn vann")
computer_points += 1
elif computer == 2:
print("Oavgjort")
else:
print("Datorn valde påse, du valde sax. Du vann")
user_points += 1
elif user==3:
if computer==1:
print("Datorn valde sten, du valde påse. Du vann")
user_points += 1
elif computer==2:
print("Datorn valde sax, du valde påse. Datorn vann")
computer_points += 1
else:
print("Oavgjort")

if user_points == points_to_win or computer_points == points_to_win:
break
else:
user = int(input("Gör ditt val: \n1:Sten \n2:Sax \n3:Påse \n> "))
computer = random.randint(1,3)

Permalänk
Medlem

Ett bra tips är att sätta [code] taggar runt din kod så blir det oerhört mycket mer läsbart. Nu är det väldigt svårt (omöjligt) att se indenteringen.

Vad säger uppgiften att funktionen checkResults ska göra? Jag hade nog lagt while-loppen i en main() istället för att splitta isär koden.

Typ såhär:

def checkResults(user, computer): <kolla resultatet> <skicka tillbaka vem som vann> def main(): <poängvariabler> while <logik som kollar om någon vunnit>: <hämta/skapa input> winner = checkResults(user, computer) <logik som lägger till poäng på vinnaren> <logik som skriver ut vem som vann> main()

Det ska dock sägas att jag just druckit vin och inte använt python på ett tag så jag kan ha helt åt helskotta fel

EDIT: Vill du få till det snyggare kan du också hämta input med en funktion men det kanske är lite överkurs i det här stadiet?

Permalänk
Medlem

Rekommenderar att du använder [ code ] ... [ /code ] (utan mellanslag) runt koden så att formateringen behålls och koden är läsbar.

blir så mycket bättre

Permalänk
Medlem

while user_points < points_to_win or computer_points < points_to_win:

Ska programmet alltså fortsätta tills både användaren och datorn fått tillräckligt många poäng för att vinna? Det är så du har skrivit ovan. Har minst en spelare för få poäng, ska ni fortsätta spela. Jag föreslår att du tittar på villkoret i while-loopen.

checkResults bör endast kolla vem som vunnit och kanske räkna poäng, men loopen bör vara utanför.

Du behöver lägga in import någonting för att koden ska gå att köra. Ser du vad du behöver importera?

Du kan förenkla if-satserna en massa:

if computer == user: elif computer == user + 1: elif computer == user - 1: elif ena valde sten, andra valde påse: elif ena valde påse, andra valde sten: