【问题标题】:Randomly generating winners随机产生获胜者
【发布时间】:2020-05-15 19:42:41
【问题描述】:

我无法弄清楚为什么会这样。

到目前为止,我所做的是生成 5 个随机数量为 1-20 的组。例如,第 1 组可能有 1,16,19;第 2 组可能有 2、6、10、11、15;等等等等。我想要做的是通过生成一个随机数 1-20 来选择一个获胜者,然后我想摆脱获胜的数字组并选择另一个随机数作为第二名。

一切正常,除非第 5 组获胜,否则号码不会从列表中删除。我是python的初学者,所以我试图理解这一点。这是代码的sn-p:

Winners_List = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)

Winning_Number = random.sample(Winners_List, 1)

Winning_Horse = []


for i in Winning_Number:
    if i in Horse1:
        Winning_Horse = Horse1
    elif i in Horse2:
        Winning_Horse = Horse2
    elif i in Horse3:
        Winning_Horse = Horse3
    elif i in Horse4:
        Winning_Horse = Horse4
    else:
        Winning_Horse = Horse5

Second_Place_List = [i for i in Winners_List if i not in Winning_Horse]

Second_Place_List 正在生成正确的列表,除非Winning_Horse = Horse5

有什么原因吗?

【问题讨论】:

  • 为什么不提供minimal reproducible example?您给出的代码 sn-p 取决于您在别处定义的变量。
  • 你为什么不说elif i in Horse5:
  • 您的代码中令人惊讶的是您没有检查 i 是否在组 Horses5 中。问题可能是选中的 i 在 Horses5 中不存在,但由于 i 在任何其他组中都不存在,因此将 Horses5 选为获胜组。这将导致 i 出现在 Second_Place_List
  • 既然你可以洗牌马匹名单并选择前两匹马作为获胜者和第二名,为什么还要经历这一切呢? horses = [1,2,3,4,5]; random.shuffle(horses); winners = horses[:2]
  • 或者直接去random.sample(horses, 2)避免洗牌?

标签: python random


【解决方案1】:

您的代码存在一些问题,中奖号码是一个只有一个值的列表,因此,for 循环并不是更好的方法。

我的建议:

winners_list = (
  1, 2, 3, 4, 5, 6,
  7, 8, 9, 10, 11,
  12, 13, 14, 15,
  16, 17, 18, 19, 20,
)
arrival_order = random.sample(winners_list, len(winners_list))
winner = arrival_order[0]
second_place_list = arrival_order[1:]

arrival_order 将收到一个列表,其中包含来自获奖者列表的随机值,如下所示:

[20, 12, 3, 17, 18, 13, 1, 19, 9, 8, 10, 16, 6, 2, 11, 5, 15, 4, 14, 7]

变量值:

获胜者:20

second_place_list : [12, 3, 17, 18, 13, 1, 19, 9, 8, 10, 16, 6, 2, 11, 5, 15, 4, 14, 7]

【讨论】:

    【解决方案2】:

    这有帮助吗?

    Winners_List = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
    
    Winning_Number = random.sample(Winners_List, 1)
    
    for i in Winning_Number:
        if i in Horse1:
            Winning_Horse = Horse1
        elif i in Horse2:
            Winning_Horse = Horse2
        elif i in Horse3:
            Winning_Horse = Horse3
        elif i in Horse4:
            Winning_Horse = Horse4
        else:
            Winning_Horse = Horse5
            
    # I remove the Winning_Number from the Winners_List
    Winners_List.pop(Winners_List.index(Winning_Number))
    # Now Winners_List is the Second_Place_List
    

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 2020-02-11
      • 2012-02-22
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 2020-03-06
      • 2019-12-15
      相关资源
      最近更新 更多