AttributeError: у объекта 'int' нет атрибута 'display' - PullRequest
0 голосов
/ 02 декабря 2019

Я пытаюсь написать программу, которая случайным образом присваивает номера трем различным спискам, а затем с помощью разных классов вызывает функцию «display ()» и отображает различные результаты. У меня есть мои классы и цикл с рандомизацией вниз, но каждый раз, когда я пытаюсь распечатать результаты display (), я получаю сообщение об ошибке, говорящее, что нет атрибута «display». Я попытался изменить имена переменных, чтобы посмотреть, поможет ли это, но ошибка не исчезла.

Мой код выглядит так:

    class Circle():
    def __init__(self, radius=1):
        self.__radius = radius

    def find_area(self):
        a = self.__radius * self.__radius * 3.142
        return(a)

    def setRadius(self, rad):
        self.__radius = rad

    def getRadius(self):
        return(self.__radius)

    def display(self):
        print("\nClass = Circle")
        print("The area for this circle is:\t")
        return(self.find_area())

class Square():
    def __init__(self, sside=2.3):
        self.__sside = sside

    def find_area(self):
        a = self.__sside * self.__sside 
        return(a)

    def setSSide(self, lw):
        self.__sside = lw

    def getSSide(self):
        return(self.__sside)

    def display(self):
        print("\nClass = Square")
        print("The area for this square is:\t")
        return(self.find_area())

class Cube():
    def __init__(self, cside=2):
        self.__cside = cside

    def find_surfacearea(self):
        sa = 6 * self.__cside * self.__cside
        return(sa)

    def setCSide(self, lwh):
        self.__cside = lwh

    def getCSide(self):
        return(self.__cside)

    def display(self):
        print("\nClass = Cube")
        print("The area for this cube is:\t")
        return(self.find_surfacearea())

x1 = Circle()
print(x1.display())

x2 = Square()
print(x2.display())

x3 = Cube()
print(x3.display())

#Lists and Loops
circlelist = []
squarelist = []
cubelist = []

circlecount = 0
squarecount = 0
cubecount = 0

for i in range (10):
    shape = random.randint(1, 3)
    number = random.randint(0, 10)

    if shape == 1:
        print("\n*Circle*")
        circlecount += 1
        circlelist.append(number)

    elif shape == 2:
        print("\n*Square*")
        squarecount += 1
        squarelist.append(number)

    else:
        print("\n*Cube*")
        cubecount += 1
        cubelist.append(number)

"""x = len(circlelist)
y = len(squarelist)
z = len(cubelist)

for i in range (x):
    circlelist[i].display()
    #print()

for i in range (y):
    squarelist[i].display()

for i in range (z):
    cubelist[i].display()"""

print("\nThe items in the circle list are:", circlelist)
print(len(circlelist))
print("The items in the square list are:", squarelist)
print(len(squarelist))
print("The items in the cube list are:", cubelist)
print(len(cubelist))

for i in range (len(circlelist)):
    circlelist[i].display()

"""for i in range (10):
    circlelist.display()
    squarelist.display()
    cubelist.display()"""

Может ли кто-нибудь помочь мне понять, где я могу ошибаться?

1 Ответ

0 голосов
/ 02 декабря 2019

В настоящее время ваши списки - это просто списки чисел. Вы не можете запустить функцию display() для чисел, она должна быть запущена на одном из ваших объектов. Это требует относительно простых изменений. Вместо того, чтобы иметь список чисел, есть список объектов.

В приведенном ниже коде я изменил его, поэтому вместо добавления числа в список он добавляет новый объект со случайным числом в качестве радиуса, sside, cside в зависимости от ситуации.

for i in range (10):
    shape = random.randint(1, 3)
    number = random.randint(0, 10)

    if shape == 1:
        print("\n*Circle*")
        circlecount += 1
        circlelist.append(Circle(radius=number))

    elif shape == 2:
        print("\n*Square*")
        squarecount += 1
        squarelist.append(Square(sside=number))

    else:
        print("\n*Cube*")
        cubecount += 1
        cubelist.append(Cube(cside=number))

Как редактировать __init__ функций для отображения при создании:

    def __init__(self, radius=1):
        self.__radius = radius
        self.display()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...