For循环不包括列表中的所有字符串

2024-09-28 01:25:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图随机挑选球员的名字,并将他们分成两个不同的队。我的名单上有5个名字,但是结果只显示了4个名字,B队总是只有一个球员的名字,而A队总是有3个名字。我能知道这有什么问题吗?我该如何解决?谢谢

这是我的密码:

from random import choice
teamA =[]
teamB =[]
players=['Campo', 'Elliston', 'Sarre', 'Priscilla', 'Josse']

def divide_player(team):
    for player in players:
        player_picked = choice(players)
        team.append(player_picked)
        players.remove(player_picked)

divide_player(teamA)
divide_player(teamB)
print(f'Team B: {teamB}')
print(f'Team A: {teamA}')


结果如下:

Team B: ['Elliston']
Team A: ['Josse', 'Sarre', 'Campo']


Team B: ['Priscilla']
Team A: ['Josse', 'Sarre', 'Elliston']

Tags: 名字teamplayer球员dividechoiceplayerspicked
3条回答

这里有一个想法:

import random

players=['Campo', 'Elliston', 'Sarre', 'Priscilla', 'Josse']

def getPlayers(n):
    lp = []
    cp = players.copy()
    for _ in range(n):
        i = random.randint(0, len(cp)-1)
        lp.append(cp[i])
        cp.pop(i)
    return lp, cp

team_1, team_2 = getPlayers(3)

print(team_1)
print(team_2)

更好的方法是shuffle()将球员分成两个队:

from random import shuffle

def divide_players(players):
    r = players[:]
    shuffle(r)
    return r[1::2], r[::2]

players = ['Campo', 'Elliston', 'Sarre', 'Priscilla', 'Josse']


teamA,teamB = divide_players(players)

print(f'Team B: {teamB}')
print(f'Team A: {teamA}')

样本输出:

Team B: ['Priscilla', 'Campo', 'Josse']
Team A: ['Sarre', 'Elliston']

你不应该改变你已经循环的列表。 你可以找到许多关于这方面的文章,例如:https://runestone.academy/runestone/books/published/fopp/TransformingSequences/WPDontMutateAListYouIterateThrough.html

如何解决? 您应该迭代复制列表的。你可以这样做

for x in list(players)
# or
for x in players[:]

相关问题 更多 >

    热门问题