首页 > 解决方案 > 当我在条件语句中检查函数的值时,该值与我返回的变量的值不同

问题描述

我有一个函数,旨在随机生成 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)

标签: python

解决方案


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

推荐阅读