Ваша проблема в области видимости ваших переменных . Область действия означает: где моя переменная определена / видима, а когда она больше не определена.
Если вы определяете переменную внутри функции (как вы это делаете), то онаизвестен только внутри этой функции - вы не можете получить к нему доступ после выхода из функции.
Переменная неизвестна - следовательно, NameError
.
Однако вы можете return
ее и присвоить какой-либо другой переменной в качестве возврата вашей функции.
Выможет обойти вашу конкретную проблему (и избавиться от этих if
операторов), упростив ваш код следующим образом:
number_of_players = int(input('How many players are playing? '))
list_of_players = []
for _ in range(number_of_players):
list_of_players.append(input('What is your name '))
player_1,player_2,player_3,player_4,player_5,player_6, *rest = list_of_players + [None]*5
print(list_of_players + [None] * 5)
print(player_1)
print(player_2)
print(player_3)
print(player_4)
print(player_5)
print(player_6)
print(rest)
Вывод для 2
+ 'jim'
+ 'bob'
:
['jim', 'bob', None, None, None, None, None] # filled up with [None] * 5
jim
bob
None
None
None
None
[]
Код работает, заполняя ваш список до необходимого количества элементов (используя [None]
для всех не введенных), чтобы вы могли снова разложить список на ваши переменные. НО было бы намного проще оставить их в списке:
for round in range(1,10):
for player in list_of_players:
print (player, "'s turn:")
# do something with this player
Это довольно сложно сделать, если вы хотите вместо этого использовать переменные player_X
и привести к большимдубликата кода, и вам все равно придется проверить, заполнен ли ваш player_X или нет ...
Подробнее о:
Как функция:
def assign_players(p):
return p + [None]*5
p1,p2,p3,p4,p5,p6,*rest = assign_players(list_of_players)