Python - 如果输入是字母或数字,则显示不同的输出

时间:2011-04-24 01:12:41

标签: 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 个答案:

答案 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(温度)