0

请看下面的代码——

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:")))

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

谢谢

4

2 回答 2

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.")

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

于 2013-11-04T06:29:55.313 回答
0

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

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

==编辑==

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

于 2013-11-04T08:05:22.377 回答