Как мне вставить мою функцию в массив без ее вызова? - PullRequest
3 голосов
/ 10 апреля 2019

У меня есть этот код pygame, в котором есть некоторые функции, я хочу иметь возможность поместить функции apple1 () и apple2 () в список без немедленного вызова, а затем вызвать его из списка.

Вот что я попробовал:

 #for all the apple
 def apple1():
   pygame.draw.rect(screen,COLOR.GREEN, [ posR,posU, apblock, apblock])

 def apple2():
   pygame.draw.rect(screen,COLOR.RED, [ posiR,posiU, apblock, apblock])

 def random_apple():
   array = [apple1(),apple2()]
   i = random.randrange(0,1)

   x = array[i]
   return x

 def time_apple():
     while time == True:
        random_apple()
        time.sleep(5)

Ответы [ 2 ]

4 голосов
/ 10 апреля 2019

Удалить скобки из их имен.

Кроме того, я думаю, вы либо захотите использовать randrange(0,2) или randint(0,1).

def random_apple():
   array = [apple1,apple2]
   i = random.randrange(0,2)

   x = array[i]
   return x()

Edit: Для чуть более Pythonic решения, устраняющего необходимость в функции random_apple, вы можете рассмотреть:

# import as needed
import random
import pygame
import time

#for all the apple
def apple1():
  pygame.draw.rect(screen,COLOR.GREEN, [ posR,posU, apblock, apblock])

def apple2():
  pygame.draw.rect(screen,COLOR.RED, [ posiR,posiU, apblock, apblock])

def time_apple():
  while time == True:
    random.choice([apple1, apple2])()
    time.sleep(5)
1 голос
/ 10 апреля 2019

Введите имена этих вызываемых объектов:

array = [apple1,apple2]

и затем измените вызов на

random_apple()()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...