>我试图编写一些代码来获取多边形的边数,用户可以随机输入每条边的长度
我想创建一个单独的类多边形,以下是我的代码:
#numSides=int(input(Number of sides))
class polygon(object):
def __init__(self,x): #useless code
self.x=x #useless code
self.x=[] #useless code
def __inputSides__(self):
#counter=0
#for i in range(x):
# counter=counter+1
numSides=int(input("number of sides"))
list_=[]
for i in range(numSides):
length=float(input("length"))
list_.append(length)
return list_
def __dispSides__(self,list_):
for i in list_:
print("side length",i)
stone= polygon()
stone.__dispSides__(4)
但是在倒数第二行中,我收到一个错误,上面写着:
Traceback (most recent call last):
File "python", line 23, in <module>
TypeError: __init__() missing 1 required positional argument: 'x'
我想知道如何解决这个问题以及为什么出现此错误?
谢谢!
一个合适的类不会提示用户输入边长;创建Polygon
的代码应该负责 I/O,并简单地将值作为参数传递给 Polygon.__init__
。
class Polygon(object):
def __init__(self, sides):
self.sides = sides
def display_sides(self):
for s in self.sides:
print("side length", s)
numSides = int(input("number of sides"))
sides = []
for i in range(numSides):
length = float(input("length"))
sides.append(length)
s = Polygon(sides)
s.display_sides()
非常简单的问题。
每当您调用多边形类时,其__init__
函数都会自动运行。您已将此启动函数设置为需要 2 个参数:self
& x
。因此,每当你启动你的类时,你必须为你的课程提供一个x
的参数。
意思不是声明stone = polygon()
,而应该声明类似stone = polygon(x)
的东西。
此外,传递和启动x
参数的原因尚不清楚,因为无论给出什么值x
,它都不会传递给类中的任何方法。这是因为在声明 self.x = x
后,它立即被您的self.x=[]
声明覆盖为空列表(不使用实际的 x
-参数(。
在相同的代码中,我应用了两个修复程序。希望你想要同样的结果。
class polygon(object):
def __init__(self,x=[]): #useless code
self.x=x
# force user to input numSide and length
numSides=int(input("number of sides"))
list_=[]
for i in range(numSides):
length=float(input("length"))
list_.append(length)
#finally list_ argument is a declaration so you have to define it(assign value)
def __dispSides__(self,list_=list_):
for i in list_:
print("side length",i)
stone= polygon()
stone.__dispSides__()
修复1:__init__(self,x=[]):
声明定义x以设置默认值
修复 2: def __dispSides__(self,list_=list_):
在这里,您声明了一个变量list_但实际上您想在此处传递以前的list_
值(看起来(,因此请传递一个值。
避免错误:stone.__dispSides__(4)
# 传递非迭代对象将引发错误