Tässä on pätkä numeronarvauspelin koodista:
import random def pelaa(): luku = random.randint(1, 10) pisteet = 0 while True: arvaus = int(input("Arvaus: ")) if arvaus == luku: print("Arvasit oikein!") print("Voitit!") pisteet = pisteet + 1 uudestaan = input("Aloitetaanko uudestaan? Kirjoita 'kyllä' aloittaaksesi uudestaan") if uudestaan.lower == "kyllä": print("Aloitetaan uudestaan") pelaa() else: file = open("tiedosto.txt", "w") file.write("Pisteet: " + str(pisteet)) file.close() file = open("tiedosto.txt", "r") data = file.read() print(data) file.close() exit()
Ohjelma jostain syystä merkitsee pisteiksi aina 1, vaikka olen pelannut uudestaan monta kertaa ja näin ollen saanut lisää pisteitä. Ongelma on jotenkin varmaan tuossa "pisteet = pisteet + 1"-kohdassa. Haluaisin ohjelman merkitsevän pisteitä aina yhden enemmän, kun olen pelannut uudestaan(kirjoittamalla "kyllä"). Voiko joku auttaa?
En koodaa pythonilla, mutta etkös kutsu aina uudestaan tuota funktiota, jolloin luot aina uuden muuttujan pisteet. Auttaako jos sijoitat tuon pisteet -muuttujan alustuksen funktion ulkopuolelle?
eli siirrä tuo "pisteet = 0" rivi tuonne "def pelaa():" yläpuolelle
Kokeilin sitä, mutta sitten tulee error:
File "arvauspeli.py", line 23, in arvo_luvut
pisteet = pisteet + 1
UnboundLocalError: local variable 'pisteet' referenced before assignment
Sain ratkaistua. Siinä piti vain määrittää muuttuja "pisteet" globaalina muuttujana.
Kiitos AtskaFin
Siili00 kirjoitti:
Tässä on pätkä numeronarvauspelin koodista:
Grez antoi sinulle toisessa viestiketjussa paremman rakenteen kahdella while-silmukalla. Olet muuttanut sen nyt yhdeksi while-silmukaksi ja rekursiiviseksi kutsuksi. Jos kääntäjä tai tulkki ei optimoi sitä pois niin varaat lokaaleille muuttujille tilaa joka kutsulla ihan turhaan...
Tossa onkin vain pätkä siitä pelistä. Ei siis koko peliä. Lyhensin myös vähän koodia. Idea oli siis vain muuttuja-ongelmassa. Oikeassa koodissa on kaksi while-silmukkaa.
Siili00 kirjoitti:
Tossa onkin vain pätkä siitä pelistä. Ei siis koko peliä. Lyhensin myös vähän koodia. Idea oli siis vain muuttuja-ongelmassa. Oikeassa koodissa on kaksi while-silmukkaa.
Älä koskaan kysy apua väärennetyllä koodilla, koska se on vittuilua auttajia kohtaan, ja usein alkuperäinen koodi sisältää eri virheitä kuin se näytteille asennettu väärennetty paska, ja sitten täällä ratkotaan ihan vääriä asioita, jotka eivät auta sinuakaan eteenpäin.
Laita oikea koodi näkyviin tai älä kysy ollenkaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.