class Node:
def __init__(self,data):
self.data=data
self.link=None
class UnOrdered:
def __init__(self):
self.head=None
def add(self,data):
new=Node(data)
ptr=self.head
if self.head==None:
self.head=new
else:
temp=ptr
while ptr!=None: #I want to write "while ptr!=None or
#ptr.data<new.data"
temp=ptr
ptr=ptr.link
p=temp.link
temp.link=new
new.link=p
def show(self):
if self.head==None:
print("No nodes")
else:
q=self.head
while q!=None:
print(q.data, end=" ")
q=q.link
ul=UnOrdered()
ul.add(3)
ul.add(5)
ul.add(4)
ul.add(11)
ul.add(10)
ul.add(5)
ul.show()
我正在尝试为有序链表创建一个程序,为此我需要在&#34; add&#34;中描述的while循环中编写多个条件。方法。 但是使用多个条件会给我以下错误: while ptr!= None或ptr.data AttributeError:&#39; NoneType&#39;对象没有属性&#39;数据&#39;
答案 0 :(得分:1)
发生这种情况的原因在于如何评估表达式ptr!=None or ptr.data < new.data
。
首先它会检查ptr!=None
。如果它是None(即表达式的计算结果为False),那么它将移动到or
的另一侧并评估ptr.data < new.data
。由于我们已经知道它是None,因此它会尝试访问data
的{{1}}属性,然后崩溃。
不幸的是,这意味着您要在None
条件中使用的表达式是不可能的。
您将需要使用不同的表达式 - 类似while
这样的表达式是有效的,因为如果while ptr!=None and ptr.data < new.data
为None,则表达式将短路并且永远不会尝试评估ptr
。