2013-06-21 4 views
0

У меня возникли проблемы с этим. Следующие работы:Python - классы с циклом for

def initiate_players(num_players): 
    player_list = [] 
    for i in range(num_players): 
     player_list.append(Player("None")) 

но когда я пытаюсь добавить переменную в нее, я ничего не получаю:

def instance_ports(port_list): 
    all_ports = [] 
    for i in port_list: 
     all_ports.append(Port(i)) 

Я знаю, что есть способ сделать это. Извините, все еще новый.

+2

Что значит «вы ничего не получаете»? – BrenBarn

+1

Возможно, port_list будет пустым. распечатать и проверить. – rajpy

+0

Почему у меня есть сильная склонность к изменению этих функций в 'return [Player (n) для n в ['None'] * num_players]' и 'return [Port (i) для i в port_list]' –

ответ

2

Прямо сейчас player_list и all_ports являются локальными переменными. То есть они доступны только в пределах функции, в которой они определены. Любая попытка использовать их вне функции не будет выполнена.

Try, имеющие свои функции return их

def initiate_players(num_players): 
    player_list = [] 
    for i in range(num_players): 
     player_list.append(Player("None")) 
    return player_list 

и

def instance_ports(port_list): 
    all_ports = [] 
    for i in port_list: 
     all_ports.append(Port(i)) 
    return all_ports 

Теперь вы можете вызвать их оттуда, где вы инициализацию как:

num = 5 
port_list = [1,3,5,7] 
player_list = initiate_players(num) 
port_list = instance_ports(ports) 

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

1

Пожалуйста, сформулируйте Ваши вопросы относительно all_ports и player_list. В приведенном выше коде обе они являются локальными переменными, вы не можете использовать их вне метода. Пожалуйста, добавьте заявление return. Точно так же, как return all_ports и return player_list, добавьте, когда они вам понадобятся, используйте all_ports = initate_players(num) и all_ports = instance_ports(pl).