Próbuję złapać elementy listy , zadeklarowałem na szczycie klasy wielokątnej, ale mam problem w metodzie Sidelenght , która jest z obok listami list ( Nie rozumiem dlaczego). Dlatego nie jestem w stanie stworzyć obliczenia obwodu mojego trójkąta. Oto, jak zaczynam:

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

Wszystko działa dobrze, dopóki nie dzwonię do metody Findperi (). Oto, co wracam do powrotu:

t.findPeri()

Co dostaję, jest poniżej:

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

Co naprawdę tu się dzieje? A jak mogę to sortować? Mój cały kod jest poniżej:

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)
0
Herc01 3 czerwiec 2018, 17:06

3 odpowiedzi

Najlepsza odpowiedź

Spróbuj użyć słowa kluczowego taka jak dla boków. To powinno naprawić twoje problemy.

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)
0
MicahB 3 czerwiec 2018, 14:30

W skrócie self.side nigdy nie jest zdefiniowany (side jest, ale to nie są takie same). Podejrzewam, że dołączasz listę do Polygon.sides, zamiast side. Jest tu kilka innych problemów. Każda instancja Polygon powinna mieć własną listę stron. Ponadto, z reguły należy spróbować zachować kodeksu z prośbą o wprowadzenie użytkownika, takie jak __init__ i przekazać te wartości jako argumenty. Oto jak uznałbym się:

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
Patrick Haugh 3 czerwiec 2018, 14:36

Użyj sumy (self.ides) zamiast suma (wielokąt.Sides)

0
Yunus 3 czerwiec 2018, 14:32