2015-12-21 3 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

Вам необходимо отметить их как глобальные: 'global Pitch, Duration'. Кроме того, не называйте свою функцию 'random', если вы импортируете модуль' 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

В Pitch и Duration переменных в winsound.Beep(Pitch, Duration) линии не была определена. Они отличаются от переменных с тем же именем в глобальной области.

Для того, чтобы сообщить интерпретатору, что ваши Pitch и Duration переменные являются такими же, как те, которые определены в глобальном масштабе, необходимо использовать global ключевое слово в функции:

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

Кроме того, вы должны defintely переименуйте свою функцию и не называйте свои функции теми же именами, что и в библиотеке Python.