postfix到binaryExpression列表

时间:2018-11-12 23:01:08

标签: python list

我是python的新手。 运行此代码时出现错误:

list=[]
list2=[]
list.append("p")
list.append("&")
list.append("k")
print(list)
operator="&" or "|" or">" or "=" or "~"
prop="p" or "q " or "r"
#a=0
for i in list:
     if i == operator:
 #        a = list.index(i)
  #       print(a - 1)
         nextelem = list[list.index(i) + 1]
         prevelem = list[list.index(i) - 1]
         print(nextelem)
         print(prevelem)
         list.remove(i)
         list2.append(i)
     if nextelem==prop:
           print("voici",nextelem)
           list2.append(nextelem)
           list2.append(prevelem)
print(list2)

指定的错误消息:

  

回溯(最近通话最近一次):

     

文件“ C:/Users/PC/PycharmProjects/LIAATP1/TP01.py”,第114行,在           如果nextelem == prop:       NameError:名称“ nextelem”未定义

例如,使用公式:p & q | r

预期收益:

[|,&,r,p,q]

[root,leftchild,rightchild,'&'的leftchild,'&'的rightchild]

1 个答案:

答案 0 :(得分:0)

除非在字符串中为空,否则字符串在Python中的计算结果为True,因此operator的值为'&'(因为or将向其返回第一个参数,其结果为{{1 }})。在命令行上对其进行测试:

True

因此,每次循环operator = "&" or "|" or ">" or "=" or "~" print(operator) # '&' 时(您应该重命名,因为list是保留字),请检查是否list。由于永远不会执行,因此永远不会执行第一个i == '&'块中的代码;由于从未执行过该代码,因此永远不会设置if

为什么会这样呢?

  

NameError:未定义名称'nextelem'


关于代码的其余部分,该逻辑具有一些基本问题,即使您在不引发异常的情况下运行它,也将阻止其执行预期的工作。

在尝试重写它之前,我强烈建议您通过the official Python tutorial来深入了解实现该算法所需的数据和控制结构。


仅是为了提供有效列表处理的示例,而忽略nextelem运算符和运算符优先级...

'~'

input_string = "p & q | r" values = input_string.split(" ") print(values) # ['p', '&', 'q', '|', 'r'] print(values[-2::-2] + values[-1::-2]) # ['|', '&', 'r', 'q', 'p'] 给出列表中的最后一个元素。 values[-1]返回一个数组切片,该数组切片从末尾开始,一次向后退2个元素,直到处理完所有元素。因此,在这种情况下,这将导致values[-1::-2]

['r', 'q', 'p']然后从列表的倒数第二个元素开始。 values[-2]再退一步,返回values[-2::-2]。串联这些列表可以为您提供所需的结果,尽管仅在非常特殊的情况下;一个通用的解决方案是您在熟悉了Python基础之后就需要进行的工作(当您遇到特定的问题/问题时,请回到SO。)。