Python 在命名元组列表中搜索命名元组
我需要找出给定的命名元组是否存在于命名元组列表中(命名元组是“多边形”类中的点,例如a(2,3))。如果列表中不存在给定的元组,则将元组附加到列表中。如果它存在,则引发用户定义的异常。当列表中不存在给定点时,该函数将起作用。但是,如果该点确实存在并且只是再次添加到列表的末尾,则不会出现异常。以下是我目前掌握的情况: 类ExistingPointError(异常): definit(自身,值): self.value=0Python 在命名元组列表中搜索命名元组,python,list,class,python-3.x,tuples,Python,List,Class,Python 3.x,Tuples,我需要找出给定的命名元组是否存在于命名元组列表中(命名元组是“多边形”类中的点,例如a(2,3))。如果列表中不存在给定的元组,则将元组附加到列表中。如果它存在,则引发用户定义的异常。当列表中不存在给定点时,该函数将起作用。但是,如果该点确实存在并且只是再次添加到列表的末尾,则不会出现异常。以下是我目前掌握的情况: 类ExistingPointError(异常): definit(自身,值): self.value=0 class Polygon(object): counter = 0
class Polygon(object):
counter = 0
def __init__(self):
Polygon.counter+=1
self.points = []
# and here's the function that I'm working with
def setter(self,pt):
def isThere(pt):
if pt in self.points: raise ExistingPointError()
print("Setting Point")
try:
isThere(pt)
self.points.append(pt)
except ExistingPointError as E:
print("Point exists! value: ", E)
print(self.points)
P = Polygon()
point=collections.namedtuple('PointName','Name x y')
A = point(Name = 'A', x = 5, y = 0)
B = point(Name = 'B',x = 10,y = 5)
C = point(Name = 'C',x=5,y=10)
D = point(Name = 'D', x=-2,y=8)
lst = [A,B,C,D]
P.createPolygon(lst)
P.setter(D)
这个怎么样
def setter(self,pt):
def isThere(pt):
if pt in self.points:
raise ExistingPointError()
print("Setting Point")
try:
isThere(pt)
self.points.append(pt)
except ExistingPointError as E:
print("Point exists! value: ", E)
print(self.points)
然而,我不相信例外是解决问题的方法。也许可以试试这个:
def setter(self,pt):
if pt in self.points:
print("Point exists!")
else:
self.points.append(pt)
print(self.points)
您想引发一个用户定义的错误ExistingPointError(),但您还没有真正定义它是什么。当我运行代码并在多边形对象中插入重复元组时,会出现以下错误:
Traceback (most recent call last):
File "python", line 27, in <module>
File "python", line 20, in setter
NameError: name 'ExistingPointError' is not defined
回溯(最近一次呼叫最后一次):
文件“python”,第27行,在
文件“python”,第20行,在setter中
NameError:未定义名称“ExistingPointError”
您可能不需要像@Gjhuizing提到的那样对此提出异常。一条简单的消息告诉用户对象已经存在,这对于您的情况应该足够了。您应该发布
pt
的外观,即您是如何定义命名元组的。欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。具体地说,您还没有发布重现问题的代码。而中的for循环在这里没有任何意义。请看,您的for循环没有意义,也不需要异常。你确定这些点是一样的吗?(命名元组不同于常规元组)是的,我在没有for循环的情况下尝试了它,得到了相同的答案。所有的点都命名为tuples:L这是一个实验室作业,所以问题说明我必须使用异常