如何在Python 3中省略条件中的字符串和其他字符?

问题描述 投票:0回答:5

我正在尝试创建一个小代码,要求用户输入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
5个回答
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())也不适用于上面的例子。


0
投票

试试这个:

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")

0
投票

尝试:

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和输入?我不认为这是正确的,如果我错了,请纠正我


0
投票

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

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

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


0
投票

尝试太慢,应该在没有必要时避免

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!')
© www.soinside.com 2019 - 2024. All rights reserved.