繁体   English   中英

如何在 Python3 中简化我的计算器代码?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM