我有一个简单的温度转换器,它可以将用户输入的摄氏温度转换为华氏温度。 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 :" ))
答案 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}
。