importrandomval=("sten","sax","påse")whileTrue:s=input("Välj sten/sax/påse eller q för att sluta: ").lower().strip()ifs=="q":print("Tack för att du spelade!")breakifsnotinval:print("Fel val! Välj sten, sax eller påse.")continued=random.choice(val)print("Datorn valde:",d)ifs==d:print("Oavgjort!")elif(s=="sten"andd=="sax")or(s=="sax"andd=="påse")or(s=="påse"andd=="sten"):print("Du vinner!")else:print("Datorn vinner!")
Rad för rad:
while True: – en oändlig loop tills vi bryter.
if s == "q": break – användaren kan avsluta.
continue – hoppa till nästa varv vid felaktig inmatning.
Välj sten/sax/påse eller q för att sluta: sax
Datorn valde: påse
Du vinner!
Välj sten/sax/påse eller q för att sluta: sten
Datorn valde: sten
Oavgjort!
Välj sten/sax/påse eller q för att sluta: q
Tack för att du spelade!
importrandomval=("sten","sax","påse")poang_spelare=0poang_dator=0whileTrue:s=input("Välj sten/sax/påse eller q för att sluta: ").lower().strip()ifs=="q":breakifsnotinval:print("Fel val! Välj sten, sax eller påse.")continued=random.choice(val)print("Datorn valde:",d)ifs==d:print("Oavgjort!")elif(s=="sten"andd=="sax")or(s=="sax"andd=="påse")or(s=="påse"andd=="sten"):print("Du vinner!")poang_spelare+=1else:print("Datorn vinner!")poang_dator+=1print(f"Ställning: Du {poang_spelare} – Dator {poang_dator}\n")print("Tack för matchen!")
Rad för rad:
poang_spelare = 0 / poang_dator = 0 – startpoäng.
+= 1 – öka poäng för vinnaren.
f"Ställning: ..." – f-sträng för snygg utskrift.
Steg 8: visa ASCII-bilder för valen
Kod (läggs ovanför loopen och används inuti loopen vid utskrift):
vinn_poang=3# ändra till 5 för “bästa av 9” (först till 5)poang_spelare=0poang_dator=0whilepoang_spelare<vinn_poangandpoang_dator<vinn_poang:# samma runda-logik som tidigare ...# uppdatera poäng# skriv ut ställningifpoang_spelare==vinn_poang:print("Grattis! Du vann matchen.")else:print("Datorn vann matchen.")
Rad för rad:
while poang_spelare < vinn_poang and poang_dator < vinn_poang: – loopen fortsätter tills någon nått målet.
importrandomval=("sten","sax","påse")poang_spelare=0poang_dator=0vinn_poang=3whilepoang_spelare<vinn_poangandpoang_dator<vinn_poang:s=input("Välj sten/sax/påse eller q för att sluta: ").lower().strip()ifs=="q":print("Du avbröt matchen.")breakifsnotinval:print("Fel val! Välj sten, sax eller påse.")continued=random.choice(val)ifs==d:print("Oavgjort!")elif(s=="sten"andd=="sax")or(s=="sax"andd=="påse")or(s=="påse"andd=="sten"):print("Du vinner rundan!")poang_spelare+=1else:print("Datorn vinner rundan!")poang_dator+=1print(f"Ställning: Du {poang_spelare} – Dator {poang_dator}")ifpoang_spelare>=vinn_poangorpoang_dator>=vinn_poang:print("Grattis! Du vann matchen."ifpoang_spelare>poang_datorelse"Datorn vann matchen.")
importrandom# 1) Ger tillgång till slumpfunktioner som random.choiceval=("sten","sax","påse")# 2) Giltiga val i spelet – tuple ändras inte# 3) Poäng räknas över flera rundorpoang_spelare=0poang_dator=0# 4) (Valfritt) ASCII-bilder för att göra det roligarebilder={"sten":""" _______---' ____/ / __/ / /_ /___/ ""","sax":""" _______---' ___ ) (___ ) (___ ) (__ )---.__(___) ""","påse":""" _______---' ____)____ ______) _______) _______)---.__________) """,}# 5) Välj matchformat – först till N poängvinn_poang=3# 6) Spelloop: kör nya rundor tills någon nått måletwhilepoang_spelare<vinn_poangandpoang_dator<vinn_poang:# 7) Läs in val och städa textens=input("Välj sten/sax/påse eller q för att sluta: ").lower().strip()# 8) Avsluta om spelaren skriver qifs=="q":print("Du avbröt matchen.")break# 9) Kontrollera giltigt valifsnotinval:print("Fel val! Välj sten, sax eller påse.")continue# hoppa till nästa runda# 10) Datorn väljer slumpmässigtd=random.choice(val)# 11) Visa bådas val med ASCII (kan kommenteras bort)print("Du valde:")print(bilder[s])print("Datorn valde:")print(bilder[d])# 12) Avgör rundanifs==d:print("Oavgjort!")elif(s=="sten"andd=="sax")or(s=="sax"andd=="påse")or(s=="påse"andd=="sten"):print("Du vinner rundan!")poang_spelare+=1# 13) Öka spelarens poängelse:print("Datorn vinner rundan!")poang_dator+=1# 14) Öka datorns poäng# 15) Visa ställningen efter varje rundaprint(f"Ställning: Du {poang_spelare} – Dator {poang_dator}\n")# 16) Matchresultat om ingen avbrötifpoang_spelare>=vinn_poangorpoang_dator>=vinn_poang:ifpoang_spelare>poang_dator:print("Grattis! Du vann matchen.")else:print("Datorn vann matchen. Bra kämpat!")print("Tack för matchen!")
alias={"pase":"påse","saxen":"sax","rock":"sten","p":"påse","s":"sten","x":"sax"}s=input(...).lower().strip()s=alias.get(s,s)# översätt om möjligt
2. förklara vinsten
Lägg till en text som beskriver varför:
orsak = {("sten","sax"):"Sten krossar sax", ("sax","påse"):"Sax klipper påse", ("påse","sten"):"Påse täcker sten"}
3. turnering
Läs in flera spelarnamn i en lista och låt turordningen rotera.
4. poängbonus
2 poäng vid tre raka vinster i rad.
Felsökning (checklista för elever)
Tom inmatning? Använd .strip() och kontrollera längden: if not s: continue.
Felstavning av “påse”? Lägg till alias/normalisering (se utmaning 1).
ASCII-bilder hoppar? Använd endast mellanslag i trippelcitat, undvik tabbar.
Oändlig loop? Kontrollera break vid s == "q" och villkoret i “först till N”.
Lärartips
Låt eleverna köra efter varje litet steg innan ni går vidare.
Använd “förutsäg resultatet” innan körning: vad händer om s == "sax" och d == "påse"?
Låt dem skriva egna testfall: mata in STEN, påse, q, felord.