【问题标题】:Looking to create a team generator based on names in a list- Python希望根据列表中的名称创建团队生成器-Python
【发布时间】:2020-12-16 20:01:35
【问题描述】:

所以有人告诉我要根据球员创建两个独立的足球队。 我现在拥有的是球员名单 以及两个名为 team_1 和 team_2 的单独列表 我希望从该列表中随机选择一名球员并将其添加到第一队或第二队。 目前的代码将玩家添加到第一组的列表中,但我需要它来删除玩家 已从玩家列表中添加到第一队,因此无法再次选择。 我正计划检查列表的长度以查看它是否为空,如果是则停止循环。 这有意义吗?

import random
team_1 = []
team_2 = []
players = ["john","garrett","aaron","mitchell"]
lenghth = len(players)
selected_team_one = random.choice(players)
team_1.append(selected_team_one)
selected_team_two = random.choice(players)
team_2.append(selected_team_two)
print(team_1)
print(team_2)

【问题讨论】:

    标签: python list


    【解决方案1】:

    您可以使用random.sample 为第一支队伍选择您需要的所有独特球员,然后通过选取不在第一支队伍中的所有球员来构建第二支队伍:

    import random
    
    players = ["john","garrett","aaron","mitchell"]
    length = len(players)
    team_1 = random.sample(players, k=length//2)
    team_2 = [player for player in players if player not in team_1]
    
    print(team_1, team_2)
    # ['aaron', 'john'] ['garrett', 'mitchell']
    

    【讨论】:

    • 现在我希望通过使用print("Team A will consist of" (*team_1)) 之类的字符串来通知每个团队的成员,但是这不起作用,但这确实print(*team_1) 知道我如何可以加入两者吗?
    • 你需要一个逗号。所以:print("Team A will consist of ", *team_1)
    • 你也可以像字典一样打印出来:team_dict = {'Team A': team_1, 'Team B': team_2}for k,v in team_dict.items(): print (k, ' will consist of ', *v)
    【解决方案2】:

    您有pop 列表方法。它返回最后一个元素并将其删除,如果您给它一个索引,它会返回索引位置中的项目并将其从列表中删除。您可以获得随机索引,random. Randrange (len (players))。我把它变成一个函数。还有参数,它是一个列表,它通过引用来更新原始列表(Python 不会复制列表(仅当您告诉它这样做时))

    import random
    
    def get_random_player(players):
        return players.pop(random.randrange(len(players)))
    
    team_1 = []
    team_2 = []
    players = ["john","garrett","aaron","mitchell"]
    
    for x in range(len(players) // 2):
       team_1.append(get_random_player(players))
       team_2.append(get_random_player(players))
    
    print(team_1)
    print(team_2)
    
    

    【讨论】:

      【解决方案3】:

      您可以在将所选球员加入团队后使用“移除”来移除他:

      $ players.remove(selected_team_one)
      

      示例:

      import random
      team_1 = []
      team_2 = []
      players = ["john","garrett","aaron","mitchell"]
      length = len(players)
      while players !=[]:
          selected_player = random.choice(players)
          team_1.append(selected_player)
          players.remove(selected_player)
          
          selected_player = random.choice(players)
          team_2.append(selected_player)
          players.remove(selected_player)
      
      print(team_1)
      print(team_2)
      

      【讨论】:

      • 那行得通,我现在在两个列表中都有 john 和 garett,但我也想将它们从玩家列表中删除,我该怎么做?
      • 这在我写的脚本中已经完成了。
      【解决方案4】:

      使用random.shuffle()

      假设您有播放器列表:

      players = [chr(element) for element in range(ord('A'), ord('Z'))]
      #=> ['A', 'B', 'C', 'D', 'E', 'F', ...
      

      并且你想建立一个由五人组成的团队(需要检查是否有足够的玩家):

      team_members = 5
      

      您可以随机播放玩家列表(如果您想保留原始列表,可以使用copy())并使用range(start, stop[, step])选择玩家:

      shuffle(players) # <- shuffle the list 
      [players[x:x+team_members] for x in range(0, len(players), 5)]
      
      #[['P', 'B', 'G', 'L', 'N'],
      # ['R', 'C', 'E', 'S', 'X'],
      # ['W', 'D', 'V', 'K', 'U'],
      # ['T', 'A', 'O', 'I', 'Q'],
      # ['H', 'Y', 'F', 'J', 'M']]
      

      提示:您还可以在dict 中按角色对玩家进行分组,并按角色轻松构建相同的团队。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        • 2022-01-15
        • 2011-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多