2016-10-08 2 views
1

Я абсолютно не замечаю что-то основное здесь ... Я пытаюсь передать возвращение функции (список списков) в другую функцию в качестве аргумента. Когда я компилирую, я получаю сообщение об ошибке, что переменная gameGridWords не определена.Передача функции в другую функцию в python

Любая помощь была бы принята с благодарностью!

Это функция, которая возвращает gameGridWords:

# Populates the tile grid with random word pairs 
###########################################################################  
def gridWords():  
    # Picks 18 random words from text file to a list, doubles list and shuffles it, returns a list with 18 pairs of words 
    words = [line.strip() for line in open("words.txt", 'r')]  
    randomWords=[]    
    for i in range(0, 18): 
     element=random.randint(0, len(words)-1) 
     randomWords.append(words[element])  
    randomWords.extend(randomWords) 
    randomWordPairs=randomWords 
    random.shuffle(randomWordPairs) 

    # Populates the game grid with word pairs 
    gameGridWords=[] 
    for row in range(6): 
     columnls=[] 
     for column in range(6): 
      columnls.append(randomWordPairs[0]) 
      del randomWordPairs[0] 
     gameGridWords.append(columnls) 
    #print (gameGridWords) 
    return gameGridWords 

Это функция, которая генерирует ошибку:

# Draws the game grid and fills it with 18 pairs of random words 
########################################################################### 
def drawGrid(gameGridWords, revealed=True): 

    # Background color 
    gameDisplay.fill(BLACK) 
    # Draws the grid with gray tiles and populates it with random word pairs 
    for row in range(6): 
      for column in range(6): 
       if not revealed: 
        color = GRAY 
        pygame.draw.rect(gameDisplay,color,[(MARGIN + WIDTH) * column + MARGIN,(MARGIN + HEIGHT) * row + MARGIN,WIDTH,HEIGHT]) 

       else: 
        word_display(gameGridWords[row][column], BLACK, row, column) 
    """ 
    # Fills tiles with blue 
    for row in range(6): 
     for column in range(6): 
      if grid[row][column] == 1: 
       color = BLUE 
       pygame.draw.rect(gameDisplay,color,[(MARGIN + WIDTH) * column + MARGIN,(MARGIN + HEIGHT) * row + MARGIN,WIDTH,HEIGHT]) 

    """ 

    timer()  
    tryCounter() 
    #pygame.display.update() 

Я называю gridWords() внутри моей gameLoop() функцию вне моего фактического время петля.

Я называю drawGrid() в моем gameLoop() внутри цикла в то время как с: drawGrid (gameGridWords, True) Ошибка я получаю следующим образом:

TraceBack (самый последний вызов последнего): Файл «C: \ Users \ Милета Nikoletic \ OneDrive \ Eclipse, рабочая область \ Python \ P-UPPGIFT DD1316 \ Память \ test6.py "строка 440, в gameIntro()

Файл" C: \ Users \ Милета Nikoletic \ OneDrive \ Eclipse, рабочее пространство \ Python \ P-UPPGIFT DD1316 \ Memory \ test6.py ", строка 192, в кнопке gameIntro (" Play (пробел) ", 150,400,250,50, GREY, BLUE, action =" play ")

Файл" C: \ Users \ Mileta Nikoletic \ OneDrive \ Eclipse workspace \ Python \ P-UPPGIFT DD1316 \ Memory \ test6.py ", строка 154, в кнопке gameLoop()

Файл« C: \ Users \ Mileta Nikoletic \ OneDrive \ Eclipse workspace \ Python \ P- UPPGIFT DD1316 \ Память \ test6.py», строка 423, в gameLoop

drawGrid (gameGridWords, True) NameError: название 'gameGridWords' не определен

Если я прошел gameGridWords в drawGrid, чем я предполагаю, что gameGridWords будет определен?

Благодарим за ваше терпение!

+2

Вы можете включить ошибку в свой пост? – Marqin

+0

Как насчет вызова 'gridWords()', который заполняет 'gameGridWords'? –

+1

'drawGrid (gridWords())'? –

ответ

0

Вы должны назначить данные, возвращаемые первой функцией, переменной.

result = gridWords() 

и последующие использовать эти данные со второй функцией.

drawGrid(result) 

(кстати. Имя result не имеет значения, вы можете использовать другое имя)

если вторая функция не в одной и той же функции, но в подфункции, то вы должны отправить result к этому подфункции и этот подфункция должен выслать это к вашей функции.

result = gridWords() 
subfunction(result) 

def subfunction(data): 
    drawGrid(data) 
Смежные вопросы