我试图编写一些代码,这些代码会占用多边形的边数,用户可以随意输入每边的长度
我想创建一个单独的类多边形,以下是我的代码:
#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'
我想知道如何解决这个问题以及为什么我会收到此错误?
谢谢!
答案 0 :(得分:1)
正确的班级不会提示用户边长; 创建 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()
答案 1 :(得分:0)
这是一个非常直截了当的问题。
每当调用多边形类时,其__init__
函数都会自动运行。您已将此启动功能设置为需要2个参数:self
&amp; x
。无论何时开始上课,您都必须为您的班级提供x
参数。
您应该声明类似stone = polygon()
的内容,而不是声明stone = polygon(x)
。
此外,您传递和发起x
参数的原因尚不清楚,因为无论给出x
的值是什么,它都不会传递给您班级中的任何方法。这是因为在声明self.x = x
之后,它会被self.x=[]
声明立即覆盖为空列表(不使用实际的x
- 参数)。
答案 2 :(得分:0)
在相同的代码中,我应用了两个修复程序。希望你想要相同的结果。
from django.contrib import admin
from .models import (Author, Book, Narrator, Audiobook)
# Register your models here.
admin.site.register(Author, Book)
admin.site.register(Narrator, Audiobook)
修复1: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__()
使用声明定义x以设置默认值
修复2:
__init__(self,x=[]):
在这里你声明了一个变量 list _ ,但实际上你想在这里传递先前的def __dispSides__(self,list_=list_):
值(看起来如此),所以请传递一个值。
避免错误:list_
#传递非迭代会引发错误