У меня возникают проблемы с анализом аргументов, введенных в командной строке, которые становятся частью списка. Следующий код правильно идентифицирует, является ли аргумент либо операнд или число, и, таким образом, делает расчеты правильно:Идентификация элементов в списке из sys.argv, чтобы сделать обратную польскую нотацию
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 или integer. Любые мысли о том, как определить, являются ли элементы списка числами или операндами?
Спасибо, это лучший способ сделать это в будущем. –
@NatG: Это лучший способ сделать это сейчас и в будущем. Синтаксически это намного лучше, чем использование нескольких условий в выражении if. Он менее подвержен ошибкам, более удобен в обслуживании и легко расширяется. – mhawke