Python def参数内的原始输入函数

时间:2013-11-04 06:26:33

标签: python function

请参阅以下代码 -

def add(a, b):
    print "ADDING %d + %d" % (a, b)
    return a + b

print "Let's do some math with just functions!"

age = add(float(raw_input("Add this:")), float(raw_input("To this:")))

无论如何,我可以缩短最后一行吗?或者,是否有另一种获取用户输入的方式?

由于

2 个答案:

答案 0 :(得分:3)

应用“不要重复自己”,我们可以采用重复的代码并从中创建一个函数:

def add(a, b):
    print "ADDING %d + %d" % (a, b)
    return a + b

print "Let's do some math with just functions!"

def getf(prompt_mesg):
    s = raw_input(prompt_mesg)
    return float(s)

age = add(getf("Add this:"), getf("To this:"))

然后如果你想要,你可以让输入函数更好地处理错误。您可以优雅地处理错误,而不是引发取消整个程序的异常:

def getf(prompt_mesg):
    while True:
        try:
            s = raw_input(prompt_mesg)
            return float(s)
        except ValueError:
            print("Could not convert that input.  Please enter a number.")

这将永远循环,直到用户输入有效输入(或终止程序)。

答案 1 :(得分:0)

我看到你正在使用p2.x.第一件事 - 我建议切换到p3.x(它有很多增强功能,但是在这种情况下你会很高兴看到raw_input()成为input()和input()并且评估已经消失了。

缩短这些东西的其他方法是使用input()而不是raw_input()。如果用户给你任何不是数字的东西,你会得到某种异常,如果他给你一个数字(浮点数,整数,等等) - 你的程序就可以了。

== EDIT ==

正如glglgl指出的那样 - 第二部分是危险的,这里的警告是适当的。使用input()与eval(raw_input())基本相同。不幸的是,我忘了这样一个事实:它不会像eval那样采用locals和globals参数 - 如果可以的话,你可以让它安全。对于真实应用程序,它不应该被使用,因为一些流氓用户可以评估他想要的任何东西,导致程序(甚至计算机)崩溃。对于像这样的简单应用程序,我坚持自己的立场,并继续说它很有用。