2013-07-08 14 views
5

Sono nuovo di Python e non ho mai imparato nessun altro linguaggio di programmazione. Sembra che stia ricevendo questo errore e ho letto altri post ma dicono di inserire global prima di [dollars = 0] che produce un errore di sintassi perché non consente [= 0]. Uso il [dollars] come contatore per tenere traccia di ciò che aggiungo e visualizzarlo quando necessario. Qualcuno potrebbe aiutarmi? Grazie.UnBoundLocalError: Variabile locale referenziata prima dell'assegnazione [contatore]

<> Codice <>

dollars = 0 

    def sol(): 
     print('Search or Leave?') 
     sol = input() 
     if sol == 'Search': 
      search() 
     if sol == 'Leave': 
      leave() 

    def search(): 
     print('You gain 5 bucks') 
     dollars = dollars + 5 
     shop() 

    def leave(): 
     shop() 

    def shop(): 
     shop = input() 
     if shop == 'Shortsword': 
      if money < 4: 
       print('I\'m sorry, but you don\'t have enough dollars to buy that item.') 
       shop1() 
      if money > 4: 
       print('Item purchased!') 
       print('You now have ' + dollars + ' dollars.') 

    sol() 

<> Traceback <>

Traceback (most recent call last): 
    File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 29, in <module> 
    sol() 
    File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 7, in sol 
    search() 
    File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 13, in search 
    dollars = dollars + 5 
UnboundLocalError: local variable 'dollars' referenced before assignment 
+0

Cosa dovrebbe accadere se 'money == 4'? – glglgl

+2

Potresti postare il traceback completo? – TerryA

risposta

16

è necessario aggiungere global dollars, come segue

def search(): 
    global dollars 
    print('You gain 5 bucks') 
    dollars = dollars + 5 
    shop() 

Ogni volta che si desidera cambiare una variabile global all'interno di una funzione, è necessario aggiungere questa affermazione, si può solo accedere alla variabile dollar senza il global dichiarazione, però,

def shop(): 
    global dollars 
    shop = input("Enter something: ") 
    if shop == 'Shortsword': 
     if dollars < 4:   # Were you looking for dollars? 
      print('I\'m sorry, but you don\'t have enough dollars to buy that item.') 
      shop1() 
     if dollars > 4: 
      print('Item purchased!') 
      dollars -= someNumber # Change Number here 
      print('You now have ' + dollars + ' dollars.') 

Hai anche bisogno di ridurre i dollari, quando fai acquisti per qualcosa!

P.S - Spero che tu stia usando Python 3, dovrai invece usare raw_input.

+2

No, non aggiustarlo! Stavo sfruttando le mie mille parole d'ordine! – TerryA

+0

@Haidro: Mi piacerebbe fare acquisti così. : P –

+0

Ho fatto ciò che è stato suggerito, tuttavia ora stampa solo. Guadagni 5 dollari, poi mostra uno spazio vuoto. Non va in negozio per qualsiasi motivo. – Justin

1

Hai bisogno di mettere global dollars, su una riga da solo, all'interno di qualsiasi funzione in cui si cambia il valore di dollari. Nel codice che hai dimostrato che è solo in search(), anche se presumo si potrà anche farlo all'interno shop() per sottrarre il valore della voce che si acquista ...

Problemi correlati