Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    72

    [Python] variabili globali e locali

    Ho iniziato a scrivere un piccolo gioco in python.
    All'inizio creo la variabile money = 100. Poi, all'interno di una funzione, il giocatore vince o perde dei soldi e devo aggiornare la variabile. A quanto ho capito per vedere il valore della variabile basta richiamarla semplicemente, mentre per cambiare il suo valore devo prima specificare "global money" e poi cambiarlo.

    Però ottengo questo errore:

    fruit.py:49: SyntaxWarning: name 'money' is used prior to global declaration
    global money
    fruit.py:53: SyntaxWarning: name 'money' is assigned to before global declaration
    global money
    fruit.py:58: SyntaxWarning: name 'money' is assigned to before global declaration
    global money
    fruit.py:63: SyntaxWarning: name 'money' is assigned to before global declaration
    global money


    (ho una serie di if/else per i vari casi che si possono presentare, e quelle indicate sono tutte le righe in cui compare "global money")

    se invece provo a togliere tutti i "global money" mi da l'errore

    UnboundLocalError: local variable 'money' referenced before assignment


    Dov'è che sbaglio?

  2. #2
    In realtà non si dovrebbero usare variabili globali, comunque potresti postare il codice?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    72
    #! /usr/bin/env python
    # -*- coding: iso-8859-1 -*-

    # Fruit machine


    import random
    import math


    #creo variabili
    money = 100
    puntato = 0


    def inizio():

    #una serie di print con le spiegazioni
    gioco()


    def gioco():

    print "Hai", money, "$.",
    puntato_input = raw_input("Quanto vuoi puntare? ")
    global puntato
    puntato = int(puntato_input)

    #attesa input
    aa = raw_input("Premi Invio per giocare")

    #Estrazione 3 numeri
    risultati = []
    for i in range(3):
    cosa = int(math.ceil(random.random()*7))
    risultati.append(cosa)

    print "Ho ottenuto", risultati

    #output
    if ((risultati[0] == risultati[1]) and (risultati[1] == risultati[2])):
    if risultati[0] == 1:
    print "Tris di 1 !!! Hai vinto 300 volte la puntata!!!"
    #global money
    money += (299 * puntato)
    else:
    print "Tris! Hai vinto 40 volte la puntata!"
    #global money
    money += (39 * puntato)

    elif ((risultati[0] == risultati[1]) or (risultati[0] == risultati[2])) or (risultati[1] == risultati[2]):
    print "Coppia! Hai vinto 3 volte la puntata"
    #global money
    money += (2 * puntato)

    else:
    print "Hai perso"
    #global money
    money -= puntato




    gioco()




    inizio()

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    72
    (nel postare il codice ha perso l'indentazione, ma nell'originale c'è)

  5. #5
    Originariamente inviato da plexott
    (nel postare il codice ha perso l'indentazione, ma nell'originale c'è)
    Usa il tag [code] per preservare l'indentazione.
    Originariamente inviato da plexott
    codice:
    #! /usr/bin/env python
    # -*- coding: iso-8859-1 -*-
    
    # Fruit machine
    
    
    import random
    import math
    
    
    #creo variabili
    money = 100
    puntato = 0
    
    
    def inizio():
    
            #una serie di print con le spiegazioni
             gioco()
            
            
    def gioco():
    
            print "Hai", money, "$.",
            puntato_input = raw_input("Quanto vuoi puntare? ")
            global puntato
            puntato = int(puntato_input)
            
            #attesa input
            aa = raw_input("Premi Invio per giocare")
    
            #Estrazione 3 numeri
            risultati = []
            for i in range(3):
                    cosa = int(math.ceil(random.random()*7))
                    risultati.append(cosa)
            
            print "Ho ottenuto", risultati
         
            #output
            if ((risultati[0] == risultati[1]) and (risultati[1] == risultati[2])):
                    if risultati[0] == 1:
                            print "Tris di 1 !!! Hai vinto 300 volte la puntata!!!"
                            #global money
                            money += (299 * puntato)
                    else:
                            print "Tris! Hai vinto 40 volte la puntata!"
                            #global money
                            money += (39 * puntato)
                            
            elif ((risultati[0] == risultati[1]) or (risultati[0] == risultati[2])) or (risultati[1] == risultati[2]):
                    print "Coppia! Hai vinto 3 volte la puntata"
                    #global money
                    money += (2 * puntato)
                    
            else:
                    print "Hai perso"
                    #global money
                    money -= puntato
           
           
         
          
            gioco()
    
    
    
    
    inizio()
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    72
    ho risolto da solo.. per cambiare valore di una variabile globale da dentro una funzione devo scrivere così:

    globals()["money"] += 50

    ..funziona, e sono scomparsi gli errori!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.