Fixing subtraction and division operations with “neutral starting point” in calculator - Python
昨天我问了一个关于我正在创建的文本计算器的计算功能的问题。我收到一个回复,建议我使用operator模块进行两个或多个操作数的Python式操作。
计算器使用一个函数计算所有操作。一种字典(operatorsDict),由四个条目组成,每个操作一个条目,存储每个操作的"预设"。执行函数时,将加载所选操作的预设。其中一个预设是"中性起点"。这是功能:
1 2 3 4 5
| 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:这样,它就不需要将result0乘以每个操作数,而不管操作数是多少,都会得到零,而是将一个操作数和操作数相乘。添加时不需要NSP。
然而,减法和除法需要NSP,两者都应该使用operandList[0]作为NSP,但这将导致当前系统停止工作。
对于需要第一个操作数nsp的操作(如减法和除法),是否有任何方法可以修改函数以使其正常工作?
如果你愿意的话,你可以用operandList[0]作为起点,当然只要operandList不是空的(当它是空的时候,你想做什么就由你决定)。
1 2 3 4 5
| 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,显然是不正确的。
- @雅各布,像往常一样,你错了(非常一致的记录!).循环位于列表的[1:]部分,因此没有任何12/12--第一个(并且这里仅是第一个)分区是12/4,返回3.0,显然是正确的。在我的答案中,你是否会费心去尝试代码,却没有注意到它们的效果,或者在你傲慢地宣称我的代码"明显不正确"之前,你就不能有那么一点点的礼貌呢?!
- 啊,我在你写的代码块中没有看到这一点。我没有复制你发布的代码。道歉。我写的"明显不正确"是指12/4不等于0.25,不侮辱你。讽刺的是,在我最后一个问题上,你对我很无礼,表现得好像我什么都不知道似的。
- 当我接受你的回答时,我很痛苦,因为我必须这样做,我支持你的傲慢和不尊重。
- @雅各布,我完全希望你撤回这个接受,就像你没有解释也没有理由地撤回,你先前接受我对你先前问题的回答——显然这是你的类型——就像你没有推翻我完全正确的回答一样。什么"不尊重"?!你没有看到我写的代码,也没有运行它,但是你仍然公开宣称它是"明显不正确的",没有任何依据——现在,你的行为!是傲慢和无礼。我刚才打电话告诉你几个容易证实的事实:你知道,现实。
- 我看到了你的代码,只是没有看到最重要的细节。我撤销了对你最后一个问题的回答的接受,因为在我测试它们时除法和减法不能正常工作。我已经解释了为什么我说"明显不正确"——一点也不侮辱你,但是说12/4显然不是0.025。我很清楚。请不要挑明我的个性。我决不是有意侮辱你、你的学识、你的品格,我只是对你对我的评价感到失望。