【发布时间】: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)避免洗牌?