请看下面的代码——
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:")))
无论如何,我可以缩短最后一行吗?或者,是否有另一种获取用户输入的方法?
谢谢
应用“不要重复自己”,我们可以取出重复的代码并从中制作一个函数:
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.")
这将永远循环,直到用户输入有效的输入(或终止程序)。
我看到你正在使用 p2.x。第一件事——我建议切换到 p3.x(它有很多增强,但在这种情况下,你会很高兴看到 raw_input() 变成了 input() 并且 input() 的评估消失了)。
缩短这些内容的其他方法是使用 input() 而不是 raw_input()。如果用户给你任何不是数字的东西,你会在加法时得到某种异常,如果他给你一个数字(浮点数,整数,等等) - 你的程序会工作。
==编辑==
正如glglgl 指出的那样-第二部分很危险,此处的警告是适当的。使用 input() 与 eval(raw_input()) 基本相同。不幸的是,我忘记了这样一个事实,即它不接受像 eval 这样的局部参数和全局参数——如果可以的话,你可以让它变得安全。对于现实生活中的应用程序,它不应该被使用,因为一些流氓用户可以评估他想要的任何东西,导致程序(甚至计算机)崩溃。对于像这样的简单应用程序,我坚持自己的立场,并一直说它很有用。