【问题标题】:Fixing subtraction and division operations with "neutral starting point" in calculator - Python在计算器中使用“中性起点”修复减法和除法运算 - Python
【发布时间】:2015-01-24 02:00:29
【问题描述】:

昨天我问了一个关于我正在创建的文本计算器的计算功能的问题。我收到一条回复,建议我使用 operator 模块以 Python 方式对 两个或更多 操作数进行操作。

计算器使用一个函数计算所有运算。一个字典 (operatorsDict),由四个条目组成,每个操作一个,存储每个操作的“预设”。执行该功能时,将加载所选操作的预设。这些预设之一是“中性起点”。这是函数:

def Calculate():
    global result, operatorsDict  #result is the answer to the calculation and = 0 at this point
    opFunc, result = operatorsDict[operation] #loading presets from dictionary - 
    for operand in operandList:
        result = opFunc(result, operand)

在此设置中,乘法需要 NSP 为 1:这样,不是将 result (0) 与每个操作数相乘(无论如何都会产生零),而是将 1 和操作数相乘。添加不需要 NSP。

但是,减法和除法需要 NSP。他们都应该将operandList[0] 作为他们的 NSP,但这会导致当前系统停止工作。

有什么方法可以修改函数,使其适用于需要 NSP 的第一个操作数的操作,例如减法和除法?

【问题讨论】:

    标签: python calculator division subtraction


    【解决方案1】:

    如果您愿意,您始终可以使用operandList[0] 作为起点,当然,只要operandList 不为空(当它为空时,您想做什么由您决定) .

    if not operandList:
        raise ValueError('Empty operand list')  # or whatever
    result = operandList[0]
    for operand in operandList[1:]
        result = opFunc(result, operand)
    

    【讨论】:

    • 假设operandList = [12, 4]operation = '/'。如果 NSP 设置为operandList[0],则计算如下: 第一次迭代:result = 12 / 12 第二次迭代:result = 1 / 4 所以最终结果将是0.25,显然不正确。
    • @Jacob,像往常一样,你(非常一致的记录!)。循环在列表的 [1:] 切片上,因此永远不会有任何 12/12 —— 第一个(也是唯一的)除法是 12/4,返回 3.0,显然 正确 .您是否甚至费心尝试我的答案中的代码,却没有注意到它们工作正常,或者在傲慢地声称我的代码“显然不正确”之前,您甚至不能有一点点普通的体面?!
    • 啊,我在你写的代码块中没有看到。我没有复制您发布的代码。道歉。我写了“明显不正确”的意思是很明显 12/4 不等于 0.25,不是为了侮辱你。具有讽刺意味的是,在我上一个问题中,你对我很粗鲁,表现得好像我什么都不知道……
    • 我很痛苦地认为,通过接受你的回答,因为我必须这样做,我支持你的傲慢和不尊重。
    • @Jacob,我完全希望您撤回此接受,就像您在没有任何解释或理由的情况下撤回您之前接受我对您之前问题的回答一样 - 显然这只是您的那种人- 就像您没有支持我完全正确的答案一样。什么“不尊重”?!你没有看到我写的代码,你没有运行它,然而你仍然公开声称它“显然不正确”任何基础——现在那个你的行为!,是傲慢和不尊重。我刚刚就几个易于验证的事实向你提出了意见:你知道,现实
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多