Невозможно отловить элементы глобального списка (наследование полигонов) - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь перехватить элементы списка сторон , который я объявил в верхней части класса Polygon, но у меня возникла проблема в методе sideLenght , который представляет собой список списков(Я не понимаю почему).Поэтому я не могу рассчитать периметр моего треугольника.Вот как я начинаю:

t=Triangle()
t.sideLength()
t.findPeri()

все работает хорошо, пока я не вызову метод findPeri ().Вот что я получу взамен:

t.findPeri()

ниже я получу следующее:

TypeError: unsupported operand type(s) for +: 'int' and 'list'

Что на самом деле здесь происходит?и как я могу с этим разобраться?Весь мой код ниже:

class Polygon:
   sides= []
   def __init__(self, num_of_sides):
       self.n= num_of_sides
       self.num_of_sides= int(input('Enter the number of sides: '))



   def sideLength(self):
       """This method appends all sides of the polygon into a list"""
       for i in range(self.n):
           side = int(input('Enter the length the side: ' + str(i+1) + ' : '))
           Polygon.sides.append(self.side)
       print Polygon.side


class Triangle(Polygon):
    def __init__(self):
       Polygon.__init__(self,3)

    def findPeri(self):
       print  'The toatal area of your perimeter is: ',sum(Polygon.sides)

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Используйте сумму (self.sides) вместо суммы (Polygon.sides)

0 голосов
/ 03 июня 2018

На первый взгляд, self.side никогда не определяется (side есть, но это не одно и то же).Я подозреваю, что вы добавляете какой-то список к Polygon.sides вместо side.Здесь есть и другие проблемы.Каждый экземпляр Polygon должен иметь свой собственный список сторон.Также, как правило, вы должны стараться не допускать, чтобы код запрашивал ввод данных пользователем, например __init__, и передавать эти значения в качестве аргументов.Вот как я бы это настроил:

class Polygon:
    def __init__(self, sides):
        self.sides = sides
        self.perimeter = sum(sides)

class Triangle(Polygon):
    def __init__(self, a, b, c):
        super(Triangle, self).__init__([a, b, c])
    @classmethod
    def input(cls):
        a = int(input("Enter side 1: "))
        b = int(input("Enter side 2: "))
        c = int(input("Enter side 3: "))
        return cls(a, b, c) 
0 голосов
/ 03 июня 2018

Попробуйте использовать ключевое слово self для свойства сторон.Это должно исправить ваши проблемы.

class Polygon:

   def __init__(self, num_of_sides):
       self.n= num_of_sides
       self.num_of_sides= int(input('Enter the number of sides: '))
       self.sides = []


   def sideLength(self):
       """This method appends all sides of the polygon into a list"""
       for i in range(self.n):
           side = int(input('Enter the length the side: ' + str(i+1) + ' : '))
           self.sides.append(side)
       print self.sides


class Triangle(Polygon):
    def __init__(self):
       Polygon.__init__(self,3)

    def findPeri(self):
       print  'The total area of your perimeter is: ',sum(self.sides)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...