2015-12-21 92 views
0

我不断收到错误:“UnboundLocalError:局部变量'在分配前引用的'Pitch'”有没有解决这个问题的方法?Python:UnboundLocalError:分配之前引用的局部变量'n'

import winsound, random 

Pitch = random.randint(1000, 10000) 
Duration = random.randint(100, 500) 

def random(): 
    winsound.Beep(Pitch, Duration) 
    Pitch = random.randint(1000, 10000) 
    Duration = random.randint(100, 500) 
    winsound.Beep(Pitch, Duration) 
    Pitch = random.randint(1000, 10000) 
    Duration = random.randint(100, 500) 
    winsound.Beep(Pitch, Duration) 
    Pitch = random.randint(1000, 10000) 
    Duration = random.randint(100, 500) 
    winsound.Beep(Pitch, Duration) 
    Pitch = random.randint(1000, 10000) 
    Duration = random.randint(100, 500) 
    winsound.Beep(Pitch, Duration) 

random() 
+0

您需要将它们标记为全局:“全局音高,持续时间”。另外,如果您要导入模块“随机”,请不要将函数命名为“random”! – senshin

+1

只需在全局范围删除那些。看起来他们没有使用。 – wim

回答

0

使用global

def random(): 
    global Pitch, Duration 
    ... 

还请有你重新定义模块random与功能random()看看。

请重命名功能,很好,random_func()

您也可以使用循环:

import winsound, random 

def rand_func(): 
    for _ in range(5): 
     Pitch = random.randint(1000, 10000) 
     Duration = random.randint(100, 500) 
     winsound.Beep(Pitch, Duration) 

rand_func() 
0

winsound.Beep(Pitch, Duration)线的PitchDuration变量尚未确定。它们不同于全球范围内同名变量。

为了通知解释,你PitchDuration变量是相同在全球范围内定义的,你需要使用global关键字在你的函数:

def random(): 
    global Pitch, Duration # <<--- this resolves your scoping issue 
    winsound.Beep(Pitch, Duration) 
    Pitch = random.randint(1000, 10000) 

此外,你应该defintely重命名你的函数,并避免用与Python库中的名称相同的名称命名你的函数。

相关问题