Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Kivi-sakset-paperi muunnelma

rosie [24.01.2014 23:56:06]

#

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

-tossu- [25.01.2014 01:14:29]

#

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)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta