使用random.choice正常但带概率权重的random.choices未触发if判断如何解决
问题原因
- 核心问题在于
random.choices()和random.choice()的返回值类型存在差异:random.choice()返回的是传入序列中的单个元素,可以直接和True/False/'Idk'做等值判断,因此之前的逻辑可以正常触发random.choices()无论参数k设置为多少,返回值都是包含对应数量结果的列表,你的代码里设置了k=2,所以result得到的是类似[True, False]的列表,自然和所有判断条件都不匹配,导致所有分支直接跳过。
修复方案
- 如果只需要生成1个随机结果,把k值改为1,并且取返回列表的第一个元素即可,修改对应代码为:
# 取返回列表的第一个元素,得到单个判断值 result = random.choices([True,False,'Idk'], weights = (70,20,10), k=1)[0]
- 如果确实需要生成2个随机结果(对应你设置的
k=2),则需要分别判断每个元素的结果,示例如下:
result_list = random.choices([True,False,'Idk'], weights = (70,20,10), k=2) for res in result_list: if res == True: print('You won 50$!') elif res == False: print('You won 100$!') elif res == 'Idk': print('You won 500$!')
其他潜在问题
你代码中打印存款时调用的mywin变量没有提前定义,运行到对应分支会直接报错,需要提前根据中奖结果给mywin赋值。
内容的提问来源于stack exchange,提问作者Jovan0000
相关产品推荐
相关产品推荐

