带有负数输入并进行数据验证的温度转换器

时间:2019-02-13 07:33:16

标签: python

我有一个简单的温度转换器,它可以将用户输入的摄氏温度转换为华氏温度。 1)将其存储在名为tempcel的变量中。 2)使用isdigit方法检查圣殿中是否有数字。 3)然后应用转换公式,并将答案存储在另一个名为tempfar的变量中。然后将其打印出来。

但是我注意到我不能在其中输入负的摄氏温度-它们被视为字符串,因此被提示再次输入!

尝试查看我如何进行此操作,以便它应防止用户输入文本,并考虑到有人可以输入负数。 有人可以帮忙吗?代码如下。谢谢。

tempcel = (input("please enter a temperature in Celcius : "))

while True:

    if (tempcel.isdigit()):

        tempcel = float(tempcel)
        tempfar = float((tempcel*9)/5 + 32)

        print("The temperature is ",tempfar, "degrees Fahrenheit.")

        if tempfar<=32:
            print("Whoa! Its freezing cold today!")

        elif tempfar<=50:    
            print("It is chilly today!")

        elif tempfar<=90:
            print("It is OK")

        else:
            print("Goddamn! Its hot today")

        break
    else:    
        print("Sorry you cannot enter a string of characters here. Please try again")

        tempcel = (input("please enter a temperature in Celcius :" ))

3 个答案:

答案 0 :(得分:1)

在这种情况下,如果人们输入不希望的30.5度,您的代码也很容易失败。解决此问题的另一种方式可能是使用try:... except:...子句,如下所示:

tempcel = (input("please enter a temperature in Celcius : "))

while True:

    try:
        tempcel = float(tempcel)
        tempfar = float((tempcel*9)/5 + 32)
        # the rest of the code you had before...

    except ValueError:    
        print("Sorry you cannot enter a string of characters here. Please try again")

        tempcel = (input("please enter a temperature in Celcius :" ))

这意味着python将尝试将输入转换为浮点数,但是如果它失败并出现ValueError(无法进行转换),它将再次提示用户。

答案 1 :(得分:0)

您可以更改测试字符串是否为有效数字的方式:

check_string(input_string):
    try:
        return float(input_string)
    except ValueError:
        return None

答案 2 :(得分:0)

最好的方法是添加异常处理以捕获到float的转换失败的情况。另外,不需要进行两个input()调用,可以将其简化如下:

while True:
    tempcel = (input("please enter a temperature in Celcius : "))

    try:
        tempcel = float(tempcel)
        tempfar = (tempcel * 9.0) / 5.0 + 32.0

        print("The temperature is {:.1f} degrees Fahrenheit.".format(tempfar))

        if tempfar <= 32:
            print("Whoa! Its freezing cold today!")
        elif tempfar <= 50:    
            print("It is chilly today!")
        elif tempfar <= 90:
            print("It is OK")
        else:
            print("Goddamn! Its hot today")
        break
    except ValueError:
        print("Sorry you cannot enter a string of characters here. Please try again")

此外,如果在计算中使用浮点数,则无需两次转换为float。使用格式可以将输出限制为小数点后1位。 {:.1f}