Python - 输入为字母或数字时显示不同输出
我想在我的if
语句中打印出方程的结果,如果输入的是数字的话;如果输入的是字母,就打印"any thing"
。
我试过这个代码,但它运行得不好。这里有什么问题呢?
while 1:
print '\tConvert ciliuse to fehrenhit\n'
temp = input('\nEnter the temp in C \n\t')
f = ((9/5)*temp +32)
if temp.isdigit():
print f
elif temp == "quit" or temp == "q" :
break
elif temp.isalpha() :
print ' hhhhhhh '
4 个回答
为什么不行呢?你有没有遇到什么错误?
我立刻就看到一个问题。你在确认这个东西是数字之前就开始计算了。把计算的部分放到 if temp.isdigit()
里面去。
首先,有几点需要注意 - 用户输入时一定要使用 raw_input
,而不是 input
。因为 input
会执行输入的代码,这样可能会很危险。
while 1:
print "\tConvert ciliuse to fehrenhit\n"
temp = raw_input("\nEnter the temp in C \n\t")
if temp in ("quit", "q"):
break
try:
f = ((9.0 / 5.0) * float(temp) + 32)
except ValueError:
print "anything"
另外,不要用 isalpha
来检查输入是否无效,而是应该使用一个捕获语句来处理 ValueError
。这个错误会在输入的值不是数字时出现。
你需要逐行检查你的代码,想想每个值你期望是什么类型。Python不像某些语言那样会自动在字符串和整数之间转换,所以记住类型是很重要的。
我们先从这一行开始:
temp = input('\nEnter the temp in C \n\t')
如果你查看这个文档,你会发现input()
在Python 2.x中实际上会对你输入的内容调用eval()
。这意味着它会把你输入的内容当作代码来执行,就像你在命令行中输入一样。所以如果你输入123
,它会返回一个int
(整数);如果你输入'abc'
,它会返回一个str
(字符串);而如果你输入abc
(而你没有定义变量abc
),它就会报错。
如果你想把用户输入的内容当作字符串来处理,应该使用raw_input()
。
接下来这一行:
f = ((9/5)*temp +32)
看起来你希望temp
是一个数字。但这样想是不对的。这一行无论temp
是什么都会执行,而你又希望输入既可以是包含数字的字符串,也可以是包含字母的字符串。这一行不应该放在这里。
继续往下看:
if temp.isdigit():
isdigit()
是一个字符串的方法,所以在这里你希望temp
是一个字符串。这其实是对的。
这个if
语句的分支应该放你的计算公式,但为了让它正常工作,你首先需要把temp
转换成整数,像这样:
c = int(temp)
另外,为了让你的计算结果正确,你应该把你乘的那个分数改成浮点数:
f = ((9/5.0)*c +32)
如果你做了以上的修改,剩下的代码应该就没问题了。