2016-03-25 4 views
0

Я пытался сделать градиент радуги с помощью этого кода, но я получил UnboundLocalError.UnboundLocalError в функции градиента pygame

import pygame, random, time 

Red = 0 
Blue = 0 
Green = 0 

background_color = (Red, Green, Blue) 
(width, height) = (300, 200) 


def ChangeRa(): 
    Red += 1 
def ChangeGa(): 
    Green += 1 
def ChangeBa(): 
    Blue += 1 
def ChangeRs(): 
    Red += 1 
def ChangeGs(): 
    Green += 1 
def ChangeBs(): 
    Blue += 1 

while Red <= 255: 
    ChangeRa() 
    time.sleep(0.1) 
while Green <= 255: 
    ChangeGa() 
    time.sleep(0.1) 
while Blue <= 255: 
    ChangeBa() 
    time.sleep(0.1) 
while Red >= 0: 
    ChangeRs() 
    time.sleep(0.1) 
while Green >= 0: 
    ChangeGs() 
    time.sleep(0.1) 
while Blue >= 0: 
    ChangeBs() 
    time.sleep(0.1) 

screen = pygame.display.set_mode((width, height)) 
pygame.display.set_caption('Rainbow!!!') 
screen.fill(background_colour) 

def close(): 
    running = True 
    while running: 
     for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
    pygame.quit() 

close() 

Это сообщение об ошибке:

Traceback (most recent call last): 
    File "/home/ronnochj/Fill.py", line 25, in <module> 
    ChangeRa() 
    File "/home/ronnochj/Fill.py", line 12, in ChangeRa 
    Red += 1 
UnboundLocalError: local variable 'Red' referenced before assignment 

ответ

0

Вы ссылки Red Перед назначением здесь (то же самое относится и к Blue и Green):

def ChangeRa(): 
    Red += 1 

Вы могли бы сказать что-то вроде :

Red = 0 
global Red 

А потом

def ChangeRa(): 
    Red += 1 

Имейте в виду, что внешняя Red определяется только за пределами ChangeRa. Используйте глобальные переменные, если вы хотите, чтобы они были доступны в рамках функций.

TLDR: Добавить global Red, Blue, Green на линии следующих Green = 0

Смежные вопросы