Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Apua muuttujien kanssa

Siili00 [10.07.2020 17:36:16]

#

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?

AtskaFin [10.07.2020 17:40:00]

#

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

Siili00 [10.07.2020 17:47:12]

#

Kokeilin sitä, mutta sitten tulee error:
File "arvauspeli.py", line 23, in arvo_luvut
pisteet = pisteet + 1
UnboundLocalError: local variable 'pisteet' referenced before assignment

Siili00 [10.07.2020 17:55:13]

#

Sain ratkaistua. Siinä piti vain määrittää muuttuja "pisteet" globaalina muuttujana.
Kiitos AtskaFin

jalski [10.07.2020 18:23:49]

#

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...

Siili00 [10.07.2020 19:35:58]

#

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.

The Alchemist [12.07.2020 05:47:55]

#

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.

Vastaus

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

Tietoa sivustosta