【问题标题】:If statement is not evaluating as True even when condition is met即使满足条件,如果语句未评估为 True
【发布时间】:2021-10-16 06:58:55
【问题描述】:

我正在尝试学习如何进行用户输入验证并以这篇文章为基础 How to return a specific point after an error in 'while' loop

我认为问题在于根据答案列表评估 current_answer 时。无论我输入什么数字,'else' 语句都会生效。

def input_validator(question, answers):
    while True:
        current_answer = input(question)
        if current_answer in answers:
            print('Success')
            break
        print ('Failure')
    return current_answer

inputQuarter = input_validator('What quarter is being processed (1,2,3,4)?: ', [1,2,3,4] )

我假设问题在于我不理解打破 for 循环的问题,因为 if/else 语句似乎在循环之外工作正常。

【问题讨论】:

  • 请修正缩进。
  • input() 返回一个字符串,answers 包含数字。因此,要么将输入转换为数字,要么将answers 更改为字符串列表。
  • 你是在比较一个字符串和一个整数吗?在比较之前尝试将所有转换为字符串。
  • @JohnMee 这不是我说的吗?
  • 如果您认为if 语句不起作用,那几乎可以肯定是因为您的条件写得不正确。

标签: python while-loop


【解决方案1】:

当你在这里调用函数时:

inputQuarter = input_validator('What quarter is being processed (1,2,3,4)?: ', [1,2,3,4] )

然后answers 将持有一个list,其值为:[1,2,3,4],即 4 个整数。 当您像这样调用函数input() 时:

current_answer = input(question)

不管用户给你的输入是什么,这里永远不会被评估为True

if current_answer in answers:

因为answers 保存整数列表,而input() 返回string。因此current_answer 是一个字符串。

您可以通过两种方式解决此问题:

  1. list 设为字符串的list
inputQuarter = input_validator('What quarter is being processed (1,2,3,4)?: ', ["1","2","3","4"] )
  1. current_answer 设为整数:
current_answer = int(input(question))

我个人更喜欢第一个,因为它也适用于更复杂的答案(只要知道它会区分大小写!)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2014-06-19
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多