python - 当我在条件语句中检查函数的值时,该值与我返回的变量的值不同
问题描述
我有一个函数,旨在随机生成 1 - 6 的数字,以及其他一些条件。我将数字保存到一个名为“turn”的变量中,然后在调用函数 ('turnSelector()') 时返回它。
奇怪的部分:后来我使用条件语句来检查 (1-6) turnSelector() 等于哪个值。我得到了一个非随机分布,所以我输入了一个 else 语句来查看 turnSelector() = 不是 1-6 的值,然后打印这些值以便我可以看到它们是什么。使用了 else 语句,打印的值在 1-6(含)之间。
如果我全局“转”并在条件语句中使用它,我会得到一个随机生成的预期分布,而 else 语句没有奇怪的其他值。
那么,为什么 turnSelector() 会返回不同的值给 'turn',即使我返回 'turn'?!
def turnSelector():
global save1, save2, save3, turn
selection = False
while selection == False:
turn = randint(1,6)
save1, save2, save3 = turn, save1, save2
if turn == save1 == save2 == save3:
continue
else:
selection = True
return turn
这会产生非随机分布:
def turnExecutor():
global scrambledState, zero, one, two, three, four, five,six
if turnSelector()== 1:
scrambledState = anterior(scrambledState)
zero += 1
elif turnSelector()== 2:
scrambledState = posterior(scrambledState)
one += 1
elif turnSelector()== 3:
scrambledState = dorsal(scrambledState)
two += 1
elif turnSelector()== 4:
scrambledState = ventral(scrambledState)
three += 1
elif turnSelector()== 5:
scrambledState = right(scrambledState)
four += 1
elif turnSelector()== 6:
scrambledState = left(scrambledState)
five += 1
else:
six += 1
print(str(turnSelector()))
这会产生我想要的随机分布:
def turnExecutor():
global scrambledState, zero, one, two, three, four, five,six
if turn == 1:
scrambledState = anterior(scrambledState)
zero += 1
elif turn == 2:
scrambledState = posterior(scrambledState)
one += 1
elif turn == 3:
scrambledState = dorsal(scrambledState)
two += 1
elif turn == 4:
scrambledState = ventral(scrambledState)
three += 1
elif turn == 5:
scrambledState = right(scrambledState)
four += 1
elif turn == 6:
scrambledState = left(scrambledState)
five += 1
# (no need for else as only 1-6 values)
解决方案
if turnSelector()== 1:
scrambledState = anterior(scrambledState)
zero += 1
elif turnSelector()== 2:
scrambledState = posterior(scrambledState)
one += 1
这对我来说不合适。您调用turnSelector
每个条件,这意味着它每次都可以返回不同的值。您有 (5/6)^6 的机会,您的条件都不会通过,并且else
会执行。尝试调用turnSelector
一次,并存储结果,并与条件中存储的结果进行比较。
def turnExecutor():
global scrambledState, zero, one, two, three, four, five,six
x = turnSelector()
if x== 1:
scrambledState = anterior(scrambledState)
zero += 1
elif x== 2:
scrambledState = posterior(scrambledState)
one += 1
elif x == 3:
scrambledState = dorsal(scrambledState)
two += 1
elif x== 4:
scrambledState = ventral(scrambledState)
three += 1
elif x== 5:
scrambledState = right(scrambledState)
four += 1
else:
scrambledState = left(scrambledState)
five += 1
推荐阅读
- javascript - React - 在内部复选框之前触发包装开发 onClick 处理程序
- python - Pygame 不会通过蓝牙传输音频,但其他应用程序会
- vert.x - 通过 Vertx 客户端调用 API 网关
- php - 如何将标头添加到用 PHP 创建的 XML 文件
- python - 使用 pandas 中的两列计算关联分数
- r - 如何使用 R 中的其他成员计算列表的成员?
- keras - 错误和困难:带有 h5 数据的 Keras 生成器:已取消的操作
- python - 如何在 Pandas 中进行行级操作并附加到现有 DataFrame?
- c# - 将 nvarchar 值“EnumValue”转换为数据类型 int 时,Entity Framework Core 3.1 枚举转换失败
- c++ - 钻石继承中的虚拟类,在基类和大多数派生类之间有多个类