Olisi ongelma tällaisen tehtävänannon kanssa:
Tällä kertaa tehdään peli Jalka-Torakka-Ydinpommi. Ohjelma pyytää käyttää valitseman jalan, torakan tai ydinpommin, ja tämän jälkeen arpoo tietokoneelle oman vastauksen. Jalka voittaa torakan, ydinpommi voittaa jalan ja torakka voittaa ydinpommin. Jos pelaaja ja tietokone valitsee saman, on kyseessä tasapeli. Tee ohjelmaan lisäksi laskurit, jotka kertovat kuinka monta kierrosta peliä on pelattu, kuinka monesti pelaaja voitti ja montako tasapeliä pelattiin.
Jos pelaaja voittaa, tulostetaan "Voitit!", jos häviää niin "Hävisit!". Tasapelillä tulostetaan "Tasapeli!" ja pelin loppuessa, kun pelaaja valitsee "Lopeta", tulostetaan "Pelasit [kierrosmäärä] kierrosta, joista voitit [voitot] ja pelasit tasan [tasapelit] peliä.".
Oon pyöritelly montaa erilaista versiota tästä ja yksikään ei toimi. Tässä olisi tarkoituksena opetella random-moduulin käyttöä eikä tehtävän ilmeisesti pitäisi olla kovin vaikea vaan ilmeisesti ajattelen jotenkin monimutkaisesti, kun koodit on venyny eikä kuitenkaan toimi ja nyt jumahdin tähän.
# -*- coding: utf-8 -*- import random jalka = 1 ydinase = 2 torakka = 3 kierrosmaara = 0 voitot = 0 tasapelit = 0 def arvonta(): kone = random.randint(1,3) def main(): testi = True while testi: valinta = input("Jalka, Ydinase vai Torakka? (Lopeta lopettaa):") if valinta == "Lopeta": testi = False print ("Pelasit",kierrosmaara,"kierrosta, joista voitit",voitot,"ja pelasit tasan",tasapelit,"peliä.") break else: kierrosmaara = kierrosmaara + 1 print ("Sinä valitsit:",valinta) arvonta() if __name__ == "__main__": main()
Ohjelman runko on hyvä, mutta testi-muuttuja on siinä turha, sillä break lopettaa silmukan joka tapauksessa. Voit käyttää pelkkää while True: -silmukkaa. Arvonta ei tässä tapauksessa tarvitse omaa funktiota, sillä siihen riittää yksi rivi koodia.
Mahdollisista valinnoista kannattaa tehdä lista, josta kone voi kätevästi valita satunnaisen random.choice -funktiolla. Random.choise toimii näin:
import random ruokalista = ["munia ja pekonia", "munia, makkaraa ja pekonia", "munia ja nötköttiä", "munia, pekonia ja nötköttiä", "munia, pekonia, makkaraa ja nötköttiä", "nötköttiä, pekonia, makkaraa ja nötköttiä"] valinta = random.choice(ruokalista) print("Ruokana on tänään", valinta)
Tämän jälkeen pitää vain tarkistaa, onko tilanne tasapeli tai kumpi voitti. Tarkistus onnistuu kolmella if-lauseella, joissa on useampi ehto. Voit myös tallentaa sanakirjaan kaikki mahdolliset vaihtoehdot tupleina ja hakea voittajan sieltä. Tasapeli kannattaa tarkistaa if-lauseella joka tapauksessa.
Esimerkin on sanakirjassa vain kaksi vaihtoehtoa ja valinnat ovat kiinteitä
voittajat = { ("jalka", "torakka"): "pelaaja", ("jalka", "ydinpommi"): "kone" } # Esimerkkiarvot pelaajan_valinta = "jalka" koneen_valinta = "torakka" # Tämä tulee silmukkaan voittaja = voittajat[(pelaajan_valinta, koneen_valinta)] print("Voittaja on", voittaja)
Aihe on jo aika vanha, joten et voi enää vastata siihen.