gpt4 book ai didi

python - 从 sys.argv 中识别列表中的元素以进行反向波兰表示法

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:49 25 4
gpt4 key购买 nike

我在解析命令行中输入的参数时遇到问题,这些参数成为列表的一部分。以下代码正确识别参数是操作数还是数字,从而使计算正确:

import operator
ops = { '+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.div }
import sys
print str(sys.argv)
array = sys.argv
total = 0
for i in range(1,len(array)):
if array[i] == '+' or array[i] == '-' or array[i] == '*' or array[i] == '/':
answer = ops[array[i]](float(array[i - 2]),float(array[i - 1]))
total += answer
print total

所以 $ 1 1 + 1 0 - 输出 3

然而,上述逻辑对于反向波兰表示法是不正确的。下面的逻辑更好(请原谅任何缩进错误),但出于某种原因,现在代码无法识别参数是操作数还是数字:

import operator
ops = { '+': operator.add, '-': operator.sub, '*': operator.mul, '/': operator.div }
import sys
print str(sys.argv)
array = sys.argv
i = 1
my_stack = []
while i < len(array):
# if array[i] == float(array[i]) or array[i] == int(array[i]):

if array[i] != '+' or array[i] != '-' or array[i] != '*' or array[i] != '/':
my_stack.insert(0, array[i])
else:
answer = ops[array[i]](float(my_stack[1]),float(my_stack[0]))
my_stack.pop(1)
my_stack.pop(0)
my_stack.insert(0, answer)
i = i + 1
print my_stack[0]

我尝试过积极地识别元素是否为数字( float 或整数),并消极地识别元素是否不是操作数,但这两种方法都不起作用。命令行无法识别该元素不是操作数,或者无法识别该元素是 float 或整数。关于如何识别列表的元素是数字还是操作数,有什么想法吗?

最佳答案

您没有正确遵循德摩根定律。第二个示例必须在“!=”部分之间使用“and”。

 if array[i] != '+' and array[i] != '-' and array[i] != '*' and array[i] != '/':

关于python - 从 sys.argv 中识别列表中的元素以进行反向波兰表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com