如果输入是数字,我想在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 '
答案 0 :(得分:4)
您需要逐行浏览代码并考虑您期望每个值的类型。 Python不会像某些语言那样在字符串和整数之间自动转换,因此记住类型很重要。
让我们从这一行开始:
temp = input('\nEnter the temp in C \n\t')
如果您查看input()
input()
,eval()
实际上会在您在Python 2.x中输入的内容中调用123
(看起来您正在使用它)。这意味着它将您在其中键入的内容视为要评估的代码,就像您在shell中键入它一样。因此,如果您输入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)
另外,为了让你的计算能够正常运行,你应该将你所乘的分数乘以一个浮点数:
{{1}}
如果您进行上述更改,其余代码应该没问题。
答案 1 :(得分:2)
首先要做的几件事 - 始终使用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
的catch子句,当使用非数值时抛出该子句。
答案 2 :(得分:0)
为什么不工作?您是否收到任何类型的错误?
直接我可以看到一个问题。在将其验证为数字之前,您正在进行计算。将计算移至if temp.isdigit()
。
答案 3 :(得分:0)
看看这个例子:
http://wiki.python.org/moin/Powerful%20Python%20One-Liners
好的,这很有效。唯一的问题是当你退出时,你会被翻译出来。
while 1:import sys; temp = raw_input('\ n输入C \ n \ t'中的temp); temp.isdigit()和sys.stdout.write('%lf'%((9./5)*float(temp)+32))或temp =='q'和sys.exit(0)或sys。 stdout.write(温度)