[英]How can I simplify my calculator code in Python3?
您好,我正在尝试找出如何简化简单计算器的代码。 我的代码是:
import sys
import operator
if len(sys.argv) != 4:
print("Usage Error: $calc2.py OPERATION Number1 Number2")
else:
operation = {
"suma": operator.add(float(sys.argv[2]), float(sys.argv[3])),
"resta": operator.sub(float(sys.argv[2]), float(sys.argv[3])),
"multiplica": operator.mul(float(sys.argv[2]), float(sys.argv[3])),
"divide": operator.truediv(float(sys.argv[2]), float(sys.argv[3])),
}
print(operation.__getitem__(sys.argv[1]))
我想删除行 print( operation.getitem ... 并在字典中放一些东西来打印我的值。谢谢
也许它并不简单——除了operation
——但它几乎没有其他有用的元素。
import sys
import operator
#sys.argv += ['resta', '1', '3'] # for test
#sys.argv += ['other', '1', '3'] # for test
#sys.argv += ['suma', 'A', 'B'] # for test
operation = {
"suma": operator.add,
"resta": operator.sub,
"multiplica": operator.mul,
"divide": operator.truediv
}
if len(sys.argv) != 4:
print("Usage Error: $calc2.py OPERATION Number1 Number2")
else:
op = operation.get(sys.argv[1]) # it returns None if it can't get it
if not op:
print('Wrong operation:', sys.argv[1], '\nIt has to be: suma, resta, multiplica, divide.')
else:
try:
print(op(float(sys.argv[2]), float(sys.argv[3])))
except ValueError as ex:
print('Wrong value(s):', sys.argv[2], sys.argv[3], '\nIt have to be float numbers.')
有一个涉及字典和运算符的常见模式,更像这样:
import sys, operator
operation = {"suma": operator.add,
"resta": operator.sub,
"multiplica": operator.mul,
"divide": operator.truediv}
if len(sys.argv) != 4:
print("Usage Error: $calc2.py OPERATION Number1 Number2")
else:
A, B = float(sys.argv[2]), float(sys.argv[3])
result = operation[sys.argv[1]](A, B)
print(result)
原始版本的一些缺陷是每次都会计算所有操作(例如,即使请求加法也执行除法,有时会导致不相关的零错误除法),并且没有目的使用函数运算符(而不是标准+-/*
算术语法)。
对于错误处理,您可以使用类似的东西:
try:
result = operation[sys.argv[1]](A, B)
except KeyError:
print('Usage Error: {0} must be one of {1}'
.format(sys.argv[1], ','.join(operation.keys()))
else:
print(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.