【问题标题】:"if" statement with input that takes int & string带有输入的“if”语句,输入为 int & string
【发布时间】:2019-07-08 18:12:18
【问题描述】:

Python 新手 (2.7)。我正在尝试收集可以是 int 或 string 的用户输入(我假设这是可能的,尽管我不是 100% 确定)。当我看到我在下面发布的声明时,我输入的任何数字都会打印“无效输入”消息并再次提示我输入用户输入,即使它在我想要的范围内。输入 '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

【问题讨论】:

  • 如果您只是学习基础知识,您可能应该忽略 Python 2,而将时间花在当前推荐和支持的语言版本上,即 Python 3。
  • raw_input 返回一个字符串,将其转换为int

标签: python python-2.7 if-statement


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您已经发现了 Python 的两个小怪癖。一:范围本身就是一个可迭代对象,但可以将一个可迭代对象放入另一个可迭代对象中。

      换句话说,你的陈述

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

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

      你可以说

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

      这会将可迭代的范围变成一个实际的列表,或者只是

      if collectEyesBlade in range(0,9):
      

      两者都应该做你想做的。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-19
        • 2016-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多