如何从列表中分配变量名称然后删除它?

时间:2016-01-16 18:48:35

标签: python python-2.7

我想创建一个函数,其中包含用户输入的名称列表。如果有偶数玩家,它将随机打印出名称,直到没有剩下的名字。如果有一个奇数,它将为输入的姓氏分配一个变量名,然后从列表中删除它。然后它会和偶数玩家一样。我希望以后能够在程序中使用姓氏。

这是我到目前为止所拥有的。这给了我一个错误的阅读,

  

"提出ValueError," randrange()的空范围(%d,%d,%d)" %   (istart,istop,width)"

def randName(teamNames):
    if len(teamNames) % 2 ==0:
        randomname = random.randrange(0, len(teamNames))
        return teamNames.pop(randomname)
    else:
        lastName = teamNames[-1]
        teamNames.pop()

2 个答案:

答案 0 :(得分:1)

from random import shuffle

def random_pairings(team_names):
    # randomize order
    team_names = list(team_names)
    shuffle(team_names)
    # remove 'odd man out'
    leftover = team_names.pop() if len(team_names) % 2 else None
    # get pairings
    trick = [iter(team_names)] * 2   # two pointers to *same* iterator
    pairs = list(zip(*trick))
    return pairs, leftover

给出了

>>> random_pairings("abcdefg")
([('g', 'c'), ('d', 'f'), ('b', 'e')], 'a')

所以你可以像

一样使用它
tennis_players = ["Dimitrov", "Herbert", "Sock", "Tomic", "Thiem"]

pairs, leftover = random_pairings(tennis_players)
for a,b in pairs:
    print("{} vs {}".format(a, b))
if leftover:
    print("{} sits this round out.".format(leftover))

Tomic vs Herbert
Sock vs Dimitrov
Thiem sits this round out.

答案 1 :(得分:0)

您只需使用randint

def randName(teamNames):
    if len(teamNames) % 2 ==0:
        randomname = random.randint(0, len(teamNames))
        return teamNames.pop(randomname)
    else:
        lastName = teamNames[-1]
        teamNames.pop()