Hur ska jag avsluta mitt spel i Python?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2014

Hur ska jag avsluta mitt spel i Python?

Tjena.

Har nu börjat med programmering och har inte programmerat sen innan jul så har nästan glömt bort allt. Vi ska göra ett simpelt spel utan grafik och jag valde sten sax påse.

Har börjat såhär;

import random

datorsvar = random.randint(1, 3)

print ("Välkommen till mitt spel, sten sax påse")

svar=int(input("Här motsvarar \n Sten=1 \n Sax=2 \n Påse=3 \n Vad väljer du? = "))
print("Datorn valde ",datorsvar)

Hur ska jag avsluta min kod? Vill göra så att man kan få lika, vinna, förlora samt att man får frågan om att köra igen. Vet att jag ska använda mig utav if och while men har helt glömt bort hur efter denna månads uppehåll.

Mvh

Trädvy Permalänk
Medlem
Plats
#Archlinux
Registrerad
Jun 2007
Skrivet av krupty:

Tjena.

Har nu börjat med programmering och har inte programmerat sen innan jul så har nästan glömt bort allt. Vi ska göra ett simpelt spel utan grafik och jag valde sten sax påse.

Har börjat såhär;

import random

datorsvar = random.randint(1, 3)

print ("Välkommen till mitt spel, sten sax påse")

svar=int(input("Här motsvarar \n Sten=1 \n Sax=2 \n Påse=3 \n Vad väljer du? = "))
print("Datorn valde ",datorsvar)

Hur ska jag avsluta min kod? Vill göra så att man kan få lika, vinna, förlora samt att man får frågan om att köra igen. Vet att jag ska använda mig utav if och while men har helt glömt bort hur efter denna månads uppehåll.

Mvh

Du måste själv välja hur lång tid spelet skall gå dvs hur många rundor mm innan det tar slut och då beräknar resultatet.

While loopen skall vara "game loopen" där du själv väljer hur många omgångar eller tid det skall pågå;
där den kommer fråga användaren vad han väljer dvs input,
kolla mot datorn och skriva ut vem som vann.
När den är klar med rundorna är det bara jämföra och skriva ut resultatet.

Arch - Makepkg, not war -||- Asus Crosshair Hero VI -||- GSkill 16GiB DDR4 15-15-15-35-1T 3600Mhz -||- AMD 1600x @ 4.1GHz -||- nVidia MSI 970 Gaming -||- Samsung 850 Pro -||- EVEGA G2 750W -||- Corsair 570x -||- Asus Xonar Essence STX -||- Sennheiser HD-650 -||
Arch Linux, one hell of a distribution.

Trädvy Permalänk
Medlem
Plats
/home
Registrerad
Dec 2005

Det enklaste sättet(kanske inte det mest eleganta) för att kolla vem som vann/oavgjort är ju att göra på följande sätt:

if datorsvar==1 and svar==1: print("Oavgjort!") elif datorsvar==2 and svar==2: print("Oavgjort!") #Osv där du jämför alla case som finns

Sen skulle jag lägga allt i en loop som nämndes ovan så du kanske kör 5 rundor eller så. Håll koll på vem som vinner varje gång och när alla rundor är slut kan du kora en vinnare

Sen för att göra det mer avancerat bör du kolla om det är ett giltigt värde som skrivs in, t.ex vad händer om man skriver in 78, sten, %#"/¤. Då fungerar det inte....Därav är en felkontroll nödvändig

Bara gammalt skräp...

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2014

Har kommit lite längre nu.

import random datorsvar = random.randint(1, 3) igen=("ja") while igen==("ja"): print ("Välkommen till mitt spel, sten sax påse") svar=int(input("Här motsvarar \n Sten=1 \n Sax=2 \n Påse=3 \n Vad väljer du? = ")) print("Datorn valde ",datorsvar) if datorsvar==svar: print ("Det blev lika!") if svar==1 and datorsvar==3: print("Du förlorade :(") if svar==1 and datorsvar==2: print("Du vann!") if svar==2 and datorsvar==1: print("Du förlorade :(") if svar==2 and datorsvar==3: print("Du vann!") if svar==3 and datorsvar==1: print("Du vann!") if svar==3 and datorsvar==2: print("Du förlorade :(") igen=input("Vill du köra igen? (ja/nej)")

Trädvy Permalänk
Medlem
Plats
Luleå
Registrerad
Jul 2008

För att while-satsen skall funka måste du tabba in allt som skall köras om (eftersom python bygger på indenteringen) .

Sedan skulle jag nog för att göra de tydligare skriva if-elsar på alla checkar. Annars skulle några kunna utfalla samtidigt om du gjort fel etc samt att alla alltid kommer kollas (iofs inget problem med hur snabbt något går i ett sådant enkelt program men kan vara bra känna till). Detta skulle medföra att du bara behöver kolla om personen vunnit eller spelat lika i alla andra fall kan du printa att personen förlorade.

Trädvy Permalänk
Moderator
Plats
Linköping
Registrerad
Okt 2006

Jag hade nog gjort en funktion för att kolla om ena typen kan slå andra typen. Då är det enklast att göra det objektorienterat men utan går också.

Så får man snygg anrop som

if datorsvar.beats(svar): print("Du förlorade")

Alternativt, men här blir det inte lika tydligt vilken som slår vilken

if beats(datorsvar, svar): print("Du förlorade")

Här kan man då har en kortare och snyggare if-sats

if datorsvar == svar: #lika elif datorsvar.beats(svar): #förlorade else: #vann

Har du åsikter om moderering, frågor eller något annat kan du kontakta mig via shimonu@sweclockers.com

Trädvy Permalänk
Medlem
Plats
/home
Registrerad
Dec 2005

Sitter och väntar på en hållfberäkning på jobbet så jag var tvungen att skriva detta...
För att få det snyggare bör man väl använda objekt/funktioner istället men känns som att den nivån du kör på så är det lagom med det jag gjort. Har även med en mycket simpel input-kontrol som gör att endast 1,2,3 är godkända inputs.

import random print ("Välkommen till mitt spel, sten sax påse") datorscore = 0 spelarscore = 0 antalrundor = 5 for x in range(1,antalrundor+1): print("\nOmgång ",x) datorsvar = random.randint(1, 3) while True: svar=input("Här motsvarar\nSten=1\nSax=2\nPåse=3\nVad väljer du? = ") if svar=="1" or svar=="2" or svar=="3": svar = int(svar) print("Datorn valde ",datorsvar) if datorsvar==svar: print("Oavgjort!") elif datorsvar==1 and svar==2: print("Datorn vann denna omgång :(") datorscore += 1 elif datorsvar==1 and svar==3: print("Du vann denna omgång :)") spelarscore += 1 elif datorsvar==2 and svar==3: print("Datorn vann denna omgång :(") datorscore += 1 elif datorsvar==2 and svar==1: print("Du vann denna omgång :)") spelarscore += 1 elif datorsvar==3 and svar==1: print("Datorn vann denna omgång :(") datorscore += 1 elif datorsvar==3 and svar==2: print("Du vann denna omgång :)") spelarscore += 1 break else: print("Ogiltig input..\n") print("\nResultat:\nDator:",datorscore,"\nSpelare:",spelarscore) if datorscore==spelarscore: print("Det blev oavgjort!") elif datorscore>spelarscore: print("Datorn vann :'(") else: print("Du vann!!!!")

Dold text

Edit:
Ny hållfberäkning, tvunget att döda lite tid.. Ett mer pimpat program nedan^^

import random def vemvann(dator, spelare): if dator==1 and spelare==3: return True elif dator==2 and spelare==1: return True elif dator==3 and spelare==2: return True print ("Välkommen till mitt spel, sten sax påse") val = ["Sten","Sax","Påse"] datorscore = 0 spelarscore = 0 while True: try: antalrundor = int(input("Hur många omgångar vill du köra? ")) if antalrundor>0: break else: print("Antalet rundor måste vara större än 0!") except: print("Du måste ange ett heltal!") for x in range(1,antalrundor+1): print("\nOmgång ",x) datorsvar = random.randint(1, 3) while True: svar=input("Här motsvarar\n"+val[0]+"=1\n"+val[1]+"=2\n"+val[2]+"=3\nVad väljer du? = ") if svar=="1" or svar=="2" or svar=="3": svar = int(svar) print("Datorn valde",val[datorsvar-1]) if vemvann(datorsvar, svar): print("Du vann denna omgång! (",val[svar-1],">",val[datorsvar-1],")") spelarscore += 1 elif datorsvar==svar: print("Oavgjort") else: print("Du förlorade denna omgång... (",val[svar-1],"<",val[datorsvar-1],")") datorscore += 1 break else: print("Ogiltig input..\n") print("\nResultat:\nDator:",datorscore,"\nSpelare:",spelarscore) if datorscore==spelarscore: print("Det blev oavgjort!") elif datorscore>spelarscore: print("Datorn vann :'(") else: print("Du vann!!!!")

Dold text

Bara gammalt skräp...