英文:
strange behavior with randint in python
问题
这段代码有时会出现以下输出:
value 1
rol don't exist
为什么会出现这种行为以及存在哪些替代方法?
这种行为发生的原因是因为 rol_rand()
函数在每次调用时都会生成一个新的随机数,然后与 rol_dict
中的值进行比较。在两次调用 rol_rand()
之间,可能会生成不同的随机数,因此可能会导致不同的结果。
为了获得一致的结果,您可以在单个函数调用中生成随机数,并将其与 rol_dict
中的值进行比较,然后打印相应的结果。这样可以确保在同一次函数调用中进行比较,而不会出现不一致的结果。
以下是修复后的代码:
rol_dict = {0: "value 1", 1: "value 2", 2: "value 3"}
from random import randint # 导入随机数生成函数
def rol_rand():
return rol_dict.get(randint(0, 2))
result = rol_rand()
if result == rol_dict.get(0):
print("value 1")
elif result == rol_dict.get(1):
print("value 2")
elif result == rol_dict.get(2):
print("value 3")
else:
print(result)
print("rol don't exist")
这样,您可以确保随机数只在 rol_rand()
函数的单次调用中生成,从而获得一致的结果。
英文:
rol_dict = { 0: "value 1", 1: "value 2", 2: "value 3" }
def rol_rand():
global rol_list
return rol_dict.get(randint(0, 2))
rol_rand()
if rol_rand() == rol_dict.get(0):
print("value 1")
elif rol_rand() == rol_dict.get(1):
print("value 2")
elif rol_rand() == rol_dict.get(2):
print("value 3")
else:
print(rol_rand())
print("rol don't exist")
For this code some times appear this output
value 1
rol don't exist
why???
Why does this behavior occur and what alternatives exist?
答案1
得分: 1
问题在于你实际上调用了 rol_rand
多次,由于它每次返回一个随机数,因此不能保证一致性。
你的当前程序获取一个介于0和2之间的随机数。如果不是0,它会投掷一个新的随机数,然后检查它是否为1。如果不是,它会再次获取一个新的随机数并检查它是否为2。很可能你会得到3个与它们的检查不相对应的值。
为了解决这个问题,你只需要将投掷结果存储在一个变量中,像这样:
from random import randint
rol_dict = { 0: "值 1", 1: "值 2", 2: "值 3" }
def rol_rand():
return rol_dict.get(randint(0, 2))
saved_roll = rol_rand()
if saved_roll == rol_dict.get(0):
print("值 1")
elif saved_roll == rol_dict.get(1):
print("值 2")
elif saved_roll == rol_dict.get(2):
print("值 3")
else:
print(saved_roll)
print("投掷结果不存在")
英文:
The issue lies with the fact that you actually call rol_rand
multiple different times, and since it returns a random number every time, there is not guaranteed consistency.
Your current program gets a random number between 0 and 2. If it's not 0, it rolls a new random number, checks if its 1. If not it gets a new random number again and checks if its 2. It's somewhat likely that you get 3 values that don't correspond to their checks.
In order to fix this, you just need to store the roll in a variable like so
from random import randint
rol_dict = { 0: "value 1", 1: "value 2", 2: "value 3" }
def rol_rand():
return rol_dict.get(randint(0, 2))
saved_roll = rol_rand()
if saved_roll == rol_dict.get(0):
print("value 1")
elif saved_roll == rol_dict.get(1):
print("value 2")
elif saved_roll == rol_dict.get(2):
print("value 3")
else:
print(saved_roll)
print("rol don't exist")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论