输入包含int和string的“ if”语句

时间:2019-07-08 18:12:18

标签: python python-2.7 if-statement

Python的新手(2.7)。我正在尝试收集可以是int或字符串的用户输入(我假设这是可能的,尽管我不确定100%)。当我到达下面发布的语句时,我输入的任何数字都会显示“无效输入”消息,并提示我再次输入用户,即使它在我希望的范围之内。输入“ q”仍然可以正常工作,如果输入则返回。

我尝试将第一个@Embedded(prefix = “some_name”)语句更改为if ...,也没有运气。

(0 <= collectEyesBlade <= 9)

3 个答案:

答案 0 :(得分:1)

由于raw_input返回str,因此从使用另一个字符串的比较开始。然后,尝试将其转换为int。最后,如果成功,请尝试整数比较。

while True:
    collectEyesBlade = raw_input("\nEnter desired blade number: ")

    if collectEyesBlade.lower() == 'q':
        return

    try:
        collectEyesBlade = int(collectEyesBlade)
    except ValueError:
        print "\nInvalid input. Enter value between 0 and 9, or 'q' to quit"
        continue

    if collectEyesBlade in range(0,9):
        break

答案 1 :(得分:0)

if collectEyesBlade in [str(x) for x in range(0,9)]-这应该起作用,因为collectEyesBlade是一个字符串,因此我们需要将其与字符串进行比较

答案 2 :(得分:0)

您遇到了两个Python的小怪癖。一个:范围本身就是一个可迭代的,但可以将一个可迭代的内容放在另一个可迭代的内部。

换句话说,您的声明

if collectEyesBlade in [range(0,9)]:

正在检查是否collectEyesBlade是列表中的一个项目,该列表只有一个项目:可迭代范围。由于您没有输入可迭代的范围,因此失败了。

您可以说

if collectEyesBlade in list(range(0,9)):

会将范围可迭代的内容转换为实际列表,或者只是

if collectEyesBlade in range(0,9):

任何人都应该做你想做的事。

但是,正如另一个回答者所提到的,这仅是问题的一半。如果您的输入实际上可能是整数类型,那么上面的内容就足够了,但是您需要一个字符串输入。仅仅因为输入为“ 1”并不意味着它不是字符串。

这里有两个选项。您可以进行尝试,除非将输入的字符串转换为整数,如果由于无法将字符串转换为整数而失败,请继续进行;或者您可以将要比较的数字范围/列表转换为字符串。