数量不定的随机团队生成器

时间:2020-07-30 14:39:54

标签: python

因此,我将学习如何使用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']

有人可以帮助我吗?

3 个答案:

答案 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]) )
相关问题