我正在尝试使用字典在Python中创建一个简单的计算器。这是我的代码:
def default():
print "Incorrect input!"
def add(a, b):
print a+b
def sub(a, b):
print a-b
def mult(a, b):
print a*b
def div(a, b):
print a/b
line = raw_input("Input: ")
parts = line.split(" ")
part1 = float(parts[0])
op = parts[1];
part3 = float(parts[2])
dict = {
'+': add(part1, part3),
'-': sub(part1, part3),
'*': mult(part1, part3),
'/': div(part1, part3)
}
try:
dict[op]
except KeyError:
default()
但所有功能都已激活。有什么问题?
答案 0 :(得分:12)
将您的字典定义为str : function
形式的对:
my_dict = {'+' : add,
'-' : sub,
'*' : mult,
'/' : div}
然后如果你想调用一个操作,使用my_dict[op]
来获取一个函数,然后用相应的参数调用它:
my_dict[op] (part1, part3)
|___________|
|
function (parameters)
注意:不要使用Python内置名称作为变量名称,否则您将隐藏其实现。例如,使用my_dict
代替dict
。
答案 1 :(得分:11)
这是因为当填充字典时,它会使用操作数执行每个操作,
最后,您正在调用包含dict[op]
的{{1}}并对其执行任何操作。
会发生什么:
None
这就是你获得所有输出的原因,而# N.B.: in case this is not clear enough,
# what follows is the *BAD* code from the OP
# with inline explainations why this code is wrong
dict = {
# executes the function add, outputs the result and assign None to the key '+'
'+': add(part1, part3),
# executes the function sub, outputs the result and assign None to the key '-'
'-': sub(part1, part3),
# executes the function mult, outputs the result and assign None to the key '*'
'*': mult(part1, part3),
# executes the function div, outputs the result and assign None to the key '/'
'/': div(part1, part3)
}
try:
# gets the value at the key "op" and do nothing with it
dict[op]
except KeyError:
default()
块中没有任何结果。
您可能想要实际执行:
try
但正如@christian明智地建议的那样,你不应该使用python保留名称作为变量名,这可能会让你陷入困境。我建议你做的另一个改进是打印一次结果,并使函数lambdas:
dict = {
'+': add,
'-': sub,
'*': mult,
'/': div
}
try:
dict[op](part1, part3)
except KeyError:
default()
将返回结果并打印出来