簡體   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