【问题标题】:Boolean variable with True value does not go into the correct "if (variable)" condition but goes to a condition of "not (variable)"具有 True 值的布尔变量不会进入正确的“如果(变量)”条件,而是进入“非(变量)”条件
【发布时间】:2021-10-20 12:05:47
【问题描述】:

我创建了一个函数,当返回 True 时,我将该 True 值放入一个变量中并将该变量置于 if 条件中,它使用 elif not 进入另一个条件,当我尝试打印它时,它打印它一次为真,一次为假,只有一行打印。

为什么它会改变值,我该如何解决? 编辑:删除了输出的最后一部分,因为它来自发生这种情况的函数之外的打印,True 和 False 现在仅来自一个打印行。 “X”和排序列表不是问题的一部分,只是打印和 if 条件

代码:

# letter_guessed = "s", old _letters_guessed = [] (empty list)

is_valid = check_valid_input(letter_guessed, old_letters_guessed) # is_valid = True
print(is_valid) 
if(is_valid): # skips this
    old_letters_guessed.append(letter_guessed)
    return True
elif not(is_valid): # enters this
    sorted_list = " -> ".join(old_letters_guessed)
    print("X")
    print(sorted_list)
    return False

输出:

True 和 False 都来自同一个打印行,没有另一个打印

True
False

【问题讨论】:

  • 打印调试非常浪费您的时间。你会更适合学习如何使用调试器,它会立即发现你的问题。
  • 最后的打印是从哪里来的?如果你错过了,那么你可能也错过了其他一些印刷品。
  • 首先,请注意在“X”之前打印了两个布尔值,但您的代码在 print("X") 之前只有一个打印语句,最接近的一个是 print(is_valid) 。显然,is_validFalse。在 if/else 在 python 中被破坏的假设和假设 is_valid 的值超出您的期望之间,后者每次都是这种情况。
  • 添加到我的最后一条评论中,我很确定您在 check_valid_input 中打印的是 True,但它实际上在完成时返回 False。第二个print其实就是我们在代码中看到的print(is_valid),是False。

标签: python boolean


【解决方案1】:

跟进一些cmets。您的函数 check_valid_input 似乎也在打印一个布尔值。这是为什么要打印两个布尔值的唯一解释。在您给出的示例中,is_valid 为 False。

letter_guessed = "s", 

old_letters_guessed = [] 

is_valid =  False
print(is_valid) 
def f():
    if(is_valid): # skips this
        old_letters_guessed.append(letter_guessed)
        return True
    else: # enters this
        sorted_list = " -> ".join(old_letters_guessed)
        print("X")
        print(sorted_list)
        return False

f()

这按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多