Hur ska jag avsluta mitt spel i Python?

Permalänk
Medlem

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

Permalänk
Medlem
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.

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Medlem

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

Visa signatur

Bara gammalt skräp...

Permalänk
Medlem

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)")

Permalänk

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.

Permalänk
Hedersmedlem

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

Permalänk
Medlem

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
Visa signatur

Bara gammalt skräp...