请参阅以下代码 -
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:")))
无论如何,我可以缩短最后一行吗?或者,是否有另一种获取用户输入的方式?
由于
答案 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参数 - 如果可以的话,你可以让它安全。对于真实应用程序,它不应该被使用,因为一些流氓用户可以评估他想要的任何东西,导致程序(甚至计算机)崩溃。对于像这样的简单应用程序,我坚持自己的立场,并继续说它很有用。