因此,我将学习如何使用python进行编码,因此,我试图制作一个如下所示的随机团队生成器。
当前,我有一个输出。但是,我的输出不是我想要的输出。 我一直在寻找一种方法来保存while循环中的数据,并将其导出到for循环中创建的列表中,并每次都保存数据。但是,这似乎是不可能的任务。
#team selector
import random
player_list=[]
players=int(input('input number of players: '))
teams= int(input('input number of teams: '))
if players<teams:
print('to many teams, to few players')
else:
for i in range(0, players):
names =input('input player {0}: '.format(i+1))
player_list.append(names)
print(player_list)
while len(player_list)>0:
for i in range(0, teams):
q=i+1
teamq=[]
while len(player_list)>0:
z=i+1
playerz=random.choice(player_list)
teamq.append(playerz)
player_list.remove(playerz)
break
if player_list==[]:
break
print('team {0} is '.format(q), teamq)
所以目前我的输出是
input number of players: 5
input number of teams: 3
input player 1: James
input player 2: peter
input player 3: john
input player 4: ann
input player 5: Jackson
['James', 'Peter', 'John', 'Ann', 'Jackson']
team 1 is ['Peter']
team 2 is ['Jackson']
team 3 is ['James']
team 1 is ['Ann']
team 2 is ['John']
team 3 is []
我想要的是
input number of players: 5
input number of teams: 3
input player 1: James
input player 2: peter
input player 3: john
input player 4: ann
input player 5: Jackson
['James', 'Peter', 'John', 'Ann', 'Jackson']
team 1 is ['Peter', 'Ann']
team 2 is ['Jackson', 'John']
team 3 is ['James']
有人可以帮助我吗?
答案 0 :(得分:1)
对不起,亲爱的,只有当队员被球队完全除尽时,它才适用于这些号码:
例如玩家= 6
team = 3
import random
player_list=[]
players=int(input('input number of players: '))
teams= int(input('input number of teams: '))
if players<teams:
print('to many teams, to few players')
else:
for i in range(0, players):
names =input('input player {0}: '.format(i+1))
player_list.append(names)
print(player_list)
max_members = players//teams
teams_2d_list = [[] for i in range(teams)]
for i in range(teams):
for j in range(max_members):
if len(player_list) == 0:
break
a_rand_player = player_list.pop(random.randint(0,len(player_list)-1))
#get a random element from player_list them pop/remove it
teams_2d_list[i].append(a_rand_player)
print("\n",teams_2d_list)
for i in range(teams):
print("team{} ".format(i),"is ",teams_2d_list[i])
输出:
[['bcd', 'abc'], ['jkp', 'sour'], ['def', 'fgh']]
team0 is ['bcd', 'abc']
team1 is ['jkp', 'sour']
team2 is ['def', 'fgh']
答案 1 :(得分:0)
以下是使用random.choices(创建团队列表)和defaultdict(链接团队和玩家)的解决方案:
导入包并初始化变量:
from collections import defaultdict
from random import choices
players = ['James', 'Peter', 'John', 'Ann', 'Jackson']
# ensure every team has at least one member
teams = ['team-1', 'team-2', 'team-3']
# and add random teams, so len(teams) == len(players)
teams += choices(teams, k = len(players) - len(teams))
# each value in the default dict is a list (initially empty)
roster = defaultdict(list)
现在将每个玩家分配到一个团队中; roster
是默认值,表示值是列表;它来自内置的collections
包。
for team, player in zip(teams, players):
roster[team].append(player)
最后,显示每个团队的成员:
for team in sorted(set(teams)):
print(team, '\t', roster[team])
team-1 ['James', 'Jackson']
team-2 ['Peter', 'Ann']
team-3 ['John']
答案 2 :(得分:0)
在下面尝试我的
请注意,我在代码中添加了一些注释并对变量名进行了一些更改。
import random, sys
# multiple assignment
players, p, teams = [], int(input('input number of players: ')), int(input('input number of teams: '))
if p < teams:
# if this block is true, print message and
# finish program instead of going through codes below
print('too many teams, too few players')
sys.exit()
for i in range(p):
n = input('input player {}: '.format(i+1))
n = n[0].upper() + n[1:] # first letter of each name capitalised
players.append(n)
print(players)
# make an empty list and inside it append each empty list
# length of teams times using list comprehension.
# use _ when you don't ever use it
team_g = [list() for _ in range(teams)]
while len(players) > 0:
for i in range(teams):
p=random.choice(players)
team_g[i].append(p)
players.remove(p)
if not players: # if players is empty
break
continue # to prevent infinite loop
for i in range(teams):
print( 'Team {} is {}'.format(i+1, team_g[i]) )