输入为int&string的“if”语句

2024-09-30 14:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

Python(2.7)新手。我试图收集一个可以是int或string的用户输入(我假设这是可能的,尽管我不是100%确定)。当我看到下面发布的语句时,我输入的任何数字都会打印“Invalid input”消息,并再次提示我输入用户输入,即使它在我希望的范围内。输入“q”仍能正常工作,如果输入则返回。你知道吗

我试着把第一个if语句改成(0 <= collectEyesBlade <= 9)。。。也不走运。你知道吗

while True:
    collectEyesBlade = raw_input(
        "\nEnter desired blade number: ")
    if collectEyesBlade in [range(0,9)]:
        break
    elif collectEyesBlade.lower() == 'q':
        return
    else:
        print "\nInvalid input. Enter value between 0 and 9, or 'q' to quit"
        continue

Tags: 用户true消息inputstringrawif数字
3条回答

if collectEyesBlade in [str(x) for x in range(0,9)]-这应该是可行的,因为collectEyesBlade是一个字符串,所以我们需要将它与字符串进行比较

你发现了Python的两个小怪癖。第一:一个范围本身就是一个iterable,但是可以把一个iterable放在另一个iterable里面。你知道吗

换句话说,你的陈述

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

正在检查collectEyesBlade是否是列表中的一个项,该列表只有一个项:range iterable。既然你没有进入一个范围,它就失败了。你知道吗

你可以说

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

这将把范围iterable变成一个实际的列表,或者

if collectEyesBlade in range(0,9):

两个都应该做你想做的。你知道吗

然而,正如另一位回答者所提到的,这只是问题的一半。如果您的输入实际上可能是整数类型,那么上面的内容就足够了,但您要求的是字符串输入。输入是“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

相关问题 更多 >