2017-06-11 2 views
0

Ich versuche, einen Fehler in Python loszuwerden, aber bisher hat jede Methode, die ich versucht habe, nicht funktioniert. Jede Hilfe würde sehr geschätzt werden.UnboundLocalError: lokale Variable 'Geld' referenziert vor der Zuweisung

Der Code:

from sense_hat import SenseHat 
import random 
from guizero import App, PushButton,Text 
import time 
import pygame.mixer 
from pygame.mixer import Sound 
pygame.mixer.init() 
sense = SenseHat() 
app = App(title="Fruity Fruit Machine", bgcolor="yellow") 
mario = Sound("SuperMarioBros.ogg") 
money = 30.00 
casino = 100.00 
global money 
global casino 
def machine(): 
    sense.clear(0,0,0) 
    images = ["apple.png", "orange.png", "lemon.png"] 
    fruit = [] 
    money = money - 1.00 
    for i in range(3): 
      img = random.choice(images) 
      fruit.append(img) 
      sense.load_image(img) 
      time.sleep(3) 
      sense.clear(0,0,0) 
    if all_same(fruit) == True: 
      sense.show_message("You won £20!") 
      casino = casino - 20.00 
      money = money + 20.00 
      display_casino() 
      dispaly_money() 
      dc = "Casino money: " + casino 
      cm.set(dc) 
      md = "Your money: " + money 
      m.set(md) 
    else: 
      sense.show_message("You got 30p!") 
      money = money + 00.30 
      casino = casino + 00.70 
      display_casino() 
      display_money() 
      dc = "Casino money: " + casino 
      cm.set(dc) 
      md = "Your money: " + money 
      m.set(md) 

def play_mario(): 
    mario.play() 
def all_same(items): 
    return all(x == items[0] for x in items) 


button = PushButton(app, command=machine, text="SPIN") 
button2 = PushButton(app, command=play_mario, text="Play Music") 
cm = Text(app, text="",align="left") 
m = Text(app, text="",align="right") 

Der Fehler ist: UnboundLocalError: lokale Variable 'Geld' vor der Zuweisung referenziert. Python kommt auch manchmal mit einer Syntaxwarnung auf: SyntaxWarning: name ‚Casino‘ zugeordnet ist, bevor globale Deklaration

+2

'global' Erklärungen keinen Sinn außerhalb Funktionen machen. – ForceBru

+0

@ juanpa.arrivillaga ah, ja. –

Antwort

0

Versuchen Sie, die globalen Deklarationen in Ihrer Funktion zu bewegen:

from sense_hat import SenseHat 
import random 
from guizero import App, PushButton,Text 
import time 
import pygame.mixer 
from pygame.mixer import Sound 
pygame.mixer.init() 
sense = SenseHat() 
app = App(title="Fruity Fruit Machine", bgcolor="yellow") 
mario = Sound("SuperMarioBros.ogg") 
money = 30.00 
casino = 100.00 
def machine(): 
    global money 
    global casino 
    sense.clear(0,0,0) 
    images = ["apple.png", "orange.png", "lemon.png"] 
    fruit = [] 
    money = money - 1.00 
    for i in range(3): 
     img = random.choice(images) 
     fruit.append(img) 
     sense.load_image(img) 
     time.sleep(3) 
     sense.clear(0,0,0) 
    if all_same(fruit) == True: 
     sense.show_message("You won £20!") 
     casino = casino - 20.00 
     money = money + 20.00 
     display_casino() 
     dispaly_money() 
     dc = "Casino money: " + casino 
     cm.set(dc) 
     md = "Your money: " + money 
     m.set(md) 
    else: 
     sense.show_message("You got 30p!") 
     money = money + 00.30 
0

Sie benötigen global money und global casino innerhalb machine zu setzen. Es außerhalb einer Funktion zu platzieren, tut nichts. Für eine Erklärung, warum nehmen Sie einen Blick auf this answer.

Verwandte Themen