random.choice有效,但random.choice(带有概率)不会出现

2024-04-18 23:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我是个新手,想尝试做一个在线赌场。 random.choice[True,False..]有效,但我需要一些带有概率的东西,所以我使用了带有权重的random.choices作为prob,但它不会在程序的下一阶段使用它来检查if,elif..,它只是移动到的“您想查看存款吗”阶段。为什么它会跳过整个部分当我使用random.choice时,它不起作用

import random

result = random.choices([True,False,'Idk'], weights = (70,20,10), k=2)

gamble1 = int(input('Enter your lucky number: '))

if result == True:
    print('You won 50$!')
elif result == False:
    print('You won 100$!')
elif result == 'Idk':
    print('You won 500$!')
 
    
    
answer = input('Would you like to see your winnings deposit(YES/NO): ')    

if answer == ('yes'):
    print(mywin)
elif answer == ('no'):
    print('Alright!')
    
    
answer2 = input('Would you like to play again?(YES/NO): ')

if answer2 == ('yes'):
    pass
elif answer2 == ('no'):
    print('Thanks for playing!')

Tags: answeryoufalsetrueinputifrandomresult
3条回答

您的代码遇到的问题是,您试图将boollist进行比较

在这一行中,您将变量result设置为一个包含两个条目的列表

result = random.choices([True,False,'Idk'], weights = (70,20,10), k=2)

因此,在一个列表中获得两个伪随机值,然后尝试将整个列表与bool进行比较

if result == True:

因此,当代码执行时,result可能看起来像['Idk', True],并且您定义的每个条件都失败['Idk', True]不等于True,不等于False,也不等于'Idk'

正如其他人的评论所提到的,您可以通过将条件语句改为if result[0]而不是if result来解决这个问题

如果您应用该修复程序,您将得到如下输出

Enter your lucky number: 7
You won 50$!
Would you like to see your winnings deposit(YES/NO): yes
Traceback (most recent call last):
File "m.py", line 21, in <module>
    print(mywin) NameError: name 'mywin' is not defined

不过,定义mywin并不难。我只想在定义gamble1answer之间重新编写一节,如下所示

# default value, variable is defined, & no need for an "if True"
mywin = 50 

if result[0] == False:
    mywin = 100
elif result[0] == 'Idk':
    mywin = 500

# print the "You won" with the value of mywin inline
print('You won $%d' % mywin )

当您运行代码时,现在应该是这样的

Enter your lucky number: 7
You won $50
Would you like to see your winnings deposit(YES/NO): yes
50
Would you like to play again?(YES/NO): yes

weights的正确值为(0.7, 0.2, 0.1)k表示在列表类型中得到的总输出。因此,即使k等于1(默认情况下),它仍然以列表的形式返回输出

>> result = random.choices([True,False,"Idk"], weights=(0.7,0.2,0.1))
>> print(result[0])
>> True

只需添加一个索引,因为choices返回一个列表

result = random.choices([True, False, 'Idk'], weights=(70, 20, 10), k=2)[0]

自己检测这些东西的一个有用方法是尝试打印出result,这样就可以看到变量实际包含的内容

相关问题 更多 >