Как назначить несколько элементов в списке для переменных, создав определение - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь создать определение, которое присваивает объектам в списке переменные, но, к сожалению, оно не работает:

, когда я пытаюсь напечатать player_1 (как на последнем шаге), это дает мнеa

NameError

Любые предложения или отзывы о том, как сделать определение короче или лучше, всегда приветствуются.Весь проект (это до начала) находится на https://github.com/ahmadkurdo/project---a

Если у вас есть время, посмотрите на него и дайте мне некоторую обратную связь, он будет признателен.

def assign_players(list_of_names):
    if len(list_of_names) == 2:
        player_1 = list_of_names[0]
        player_2 = list_of_names[1]

    elif len(list_of_names) == 3:
        player_1 = list_of_names[0]
        player_2 = list_of_names[1]
        player_3 = list_of_names[2]

    elif len(list_of_names) == 4:
        player_1 = list_of_names[0]
        player_2 = list_of_names[1]
        player_3 = list_of_names[2]
        player_4 = list_of_names[3]

    elif len(list_of_names) == 5:
        player_1 = list_of_names[0]
        player_2 = list_of_names[1]
        player_3 = list_of_names[2]
        player_4 = list_of_names[3]
        player_5 = list_of_names[4]

    elif len(list_of_names) == 6:
        player_1 = list_of_names[0]
        player_2 = list_of_names[1]
        player_3 = list_of_names[2]
        player_4 = list_of_names[3]
        player_5 = list_of_names[4]
        player_6 = list_of_names[5]


number_of_players = int(input('How many players are playing?  '))
list_of_players = []

while number_of_players > 0:
    name_player = input('What is your name  ')
    list_of_players.append(name_player)
    number_of_players = number_of_players - 1

assign_players(list_of_players)

print(player_1)

1 Ответ

0 голосов
/ 01 декабря 2018

Ваша проблема в области видимости ваших переменных . Область действия означает: где моя переменная определена / видима, а когда она больше не определена.

Если вы определяете переменную внутри функции (как вы это делаете), то онаизвестен только внутри этой функции - вы не можете получить к нему доступ после выхода из функции.

Переменная неизвестна - следовательно, 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...