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?

Visa signatur

Primär: R9 3900X | ASUS X570-F Gaming | NH-D15 | 64GB@3200MHz | RTX 3080 10GB | Seasonic 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |

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

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk

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: