【问题标题】:How do I omit strings and other characters within conditionals in Python 3?如何在 Python 3 中省略条件语句中的字符串和其他字符?
【发布时间】:2018-08-11 18:33:17
【问题描述】:

我正在尝试创建一个小代码,要求用户输入 1 到 100 之间的数字。但是当输入字符串时,我的 Else 语句不会输出。如果用户输入的输入不是整数或浮点数,我希望我的 Else 语句打印一条消息。这是我的代码。

def between():
    print ("Please enter a number between 1 and 100.")
    number = eval(input())
    if number >= 1 and number <= 100:
        print ("Thank you! You entered",number,"which is within the 1 and 100 range.")
        between()
    elif number > 100 or number < 1: 
        print ("OOPS! You entered",number,"Please enter a number between 1 and 100.")
        between()
    else: 
        print ("ERROR! You have entered an invalid value. Please try again using numerical values only.")
        between()

between()

【问题讨论】:

标签: python python-3.x


【解决方案1】:

最简单的方法是使用tryexcept

num = input()
try:
    number = float(num)
    # code to do if num is a number
except ValueError:
    print("Not a number!")
    # code to do if num isn't a number

如果num 不是数字,则将其转换为浮点数将引发ValueError 继续except。 如果num 是一个数字,则将其覆盖为浮点数会运行良好,并在try 中继续。

旁注:我强烈建议不要使用eval(input()),而只使用input(),请参阅this,了解为什么不应该使用evaleval(input()) 也不适用于我上面的示例。

【讨论】:

  • 最简单的方法不是try,就像使用蛮力一样,有内置的方法来检查一个对象是属于一个类还是另一个(在python中一切都是对象,即使是函数)
  • @ShadyCake 我使用 eval 是因为它可以自动检测输入是 int 还是 float。我想让代码对两者都通用。
  • @ShailynOrtiz 输入将始终返回一个字符串,我正在做的是检查字符串是否可以转换为整数。不检查变量本身是否为整数。
  • @Zach 使用 float() 进行转换将具有您正在寻找的相同效果,但没有 eval() 的危险
  • 在这种情况下,使用 isdigit() ;) try 根本没有必要。不是想推销自己。 @ShadyCake 看看我的回答:stackoverflow.com/a/49088022/7579116
【解决方案2】:

试试这个:

print "Please enter a number between 1 and 100"
in = input()


try:
    num = int(in)

    if 1 <= num <= 100:
        print("Valid")
    else:
        print("Out of bounds")

except:

    print("Invalid")

【讨论】:

    【解决方案3】:

    试试:

    def between():
        print ("Please enter a number between 1 and 100.")
        number=0
        try:
            number = int(input())
        except:
            print ("ERROR! You have entered an invalid value. Please try again using numerical values only.")
            exit(1)
        if number >= 1 and number <= 100:
            print ("Thank you! You entered",number,"which is within the 1 and 100 range.")
            between()
        else: 
            print ("OOPS! You entered",number,"Please enter a number between 1 and 100.")
            between()
    
    
     between()
    

    注意:为什么要同时使用 eval 和 input?我觉得不对,有错请指正

    【讨论】:

    【解决方案4】:

    您的代码存在一些逻辑问题。首先,在使用eval() 之前,您必须了解与之相关的安全风险。考虑通过这个post 获得一些见解。如果您在 eval 中输入了一些任意输入,则很可能是运行时错误。

    现在,假设变量实际上有一个值。要检查它是整数还是浮点数并且在所需范围内或其他内容(可能是字符串),您不能直接对其应用比较运算符,因为如果变量不是数字,它很可能会给出 @987654323 @ 在与其他整数比较时。

    因此,正确的方法是首先通过检查if type(r) is int or type(r) is float 来检查变量是否为所需类型,然后才应该应用范围测试。如果上面的类型检查是错误的,那么你应该打印你的“else”错误信息。

    【讨论】:

      【解决方案5】:

      尝试太慢,不必要的时候应该避免

      num = input("Please enter a number between 1 and 100: ")
      
      if num.replace('.','').isdigit():
          num = float(num)
          if number >= 1 and number <= 100:
              print ("Thank you! You entered",number,"which is within the 1 and 100 range.")
              between()
          else:
              print ("OOPS! You entered",number,"Please enter a number between 1 and 100.")
              between()
      else:
          print('thats not a number!')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-02
        • 2020-12-12
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 2013-04-29
        相关资源
        最近更新 更多