[英]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.