Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python, Viope: Satunnaisluku on aina sama

gronler [16.07.2015 21:07:32]

#

Törmäsin ongelmaan, jossa random.randint() palauttaa aina luvun 1, vaikka sulkeiden sisään laittaisi mitä. Olen tekemässä viopen kurssia ja siellä on muunnos kivi-paperi-sakset pelistä, jossa tietokone arpoo yhden vaihtoehdon kolmesta. En saa siis konetta arpomaan mitään muuta kuin yhden ja saman joka kierroksella.

Osaisiko joku auttaa eteenpäin?

Tässä koodia, jonka kirjoittelin (keskeneräinen, koska huomasin tuon ongelman enkä ruvennut tekemään enempää):

import random

kierrokset = 1
voitot = 0
tasapelit = 0

def arvonta():
	lista = ["Jalka", "Ydinase", "Torakka"]
	cpu = random.randint(1,3)

	if cpu == "1":
		cpu = "Jalka"
	elif cpu == "2":
		cpu = "Ydinase"
	elif cpu == "3":
		cpu = "Torakka"
	print("Tietokone valitsi: ",cpu)


def main():
	while True:
		kierrokset = 1
		voitot = 0
		tasapelit = 0
		valinta = input("Jalka, Ydinase vai Torakka? (Lopeta lopettaa): ")

		if valinta == "Lopeta":
			print("Pelasit",kierrokset,"kierrosta, joista voitit",voitot," ja pelasit tasan ",tasapelit,"peliä.")
			break
		else:
			kierrokset = kierrokset + 1
			print("Sinä valitsit: ",valinta)
			arvonta()


if __name__ == "__main__":
	main()

Antti Laaksonen [16.07.2015 21:14:34]

#

Minulla tuo arvonta toimii kyllä ihan hyvin.

Kuitenkin luulen, että vertailujen tulisi olla tyyliin "cpu == 1", koska 1 on luku eikä merkkijono.

gronler [16.07.2015 21:21:13]

#

Olisiko tuolla viopen selainpohjaisessa tulkissa jokin häikkä sitten ?

Lisäys:

Lisäsin tuohon print-käskyn näyttää mitä kone arpoo. Aina tulee ykkönen :(

Jalka, Ydinase vai Torakka? (Lopeta lopettaa): Jalka
Sinä valitsit: Jalka
1
Tietokone valitsi: Jalka
Jalka, Ydinase vai Torakka? (Lopeta lopettaa): Ydinase
Sinä valitsit: Ydinase
1
Tietokone valitsi: Jalka
Jalka, Ydinase vai Torakka? (Lopeta lopettaa): Torakka
Sinä valitsit: Torakka
1
Tietokone valitsi: Jalka
Jalka, Ydinase vai Torakka? (Lopeta lopettaa): Lopeta
Pelasit 1 kierrosta, joista voitit 0 ja pelasit tasan 0 peliä.

Antti Laaksonen [16.07.2015 21:32:31]

#

Kuulostaa erikoiselta, mutta jos suorittamasi koodi on varmasti yllä oleva, niin minäkin epäilisin, että vika on Viopen suoritusympäristössä.

Esim. tässä suoritettuna koodi toimii oikein:

http://www.tutorialspoint.com/execute_python3_online.php

(sivu ei hyväksy ä-merkkiä, joten pitää muuttaa Sinä->Sina)

Chiman [17.07.2015 09:46:01]

#

random.randintin sijasta kannattaa käyttää random.choicea, joka valitsee listasta satunnaisen alkion. Vältyt siten turhilta muunnoksilta.

>>> from random import choice
>>> lista = ["Jalka", "Ydinase", "Torakka"]
>>> choice(lista)
'Torakka'
>>> choice(lista)
'Jalka'
>>> choice(lista)
'Jalka'

dewabe [17.07.2015 12:42:46]

#

Viope testaa ensin 1, sitten 2 ja lopulta 3 "satunnaisluvun" kyseisessä tehtävässä. Toiminta lienee sen takia, että saavat tarkistettua tulosteen omaan vertailutulosteeseensa.

Vastaus

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

Tietoa sivustosta