2015-12-09 2 views
0

Итак, моя проблема: я пытаюсь создать программу, которая создаст многоугольник, который имеет как минимум 3 точки (которые состоят из координат x и y) или углов. Я хотел бы, если бы было представлено менее 3 баллов или углов, программа вернет ошибку, заявив, что количества очков недостаточно. Мне нужно создать это с помощью классов.Формирование многоугольника с классами

Я создал это до сих пор: `

class Polygon: 

    number_points = 0 
    number_angles = 0 



    def __init__(self, coordinate_x, coordinate_y, angles): 
     s = [] 
     self.coordinate_x = coordinate_x 
     self.coordinate_y = coordinate_y 
     self.angles = angles 
     self.s = s.append([coordinate_x, coordinate_y]) 
     Polygon.number_points = Polygon.number_points + 1 
     Nkotnik.number_angles = Polygon.number_angles + 1 


    # Here i would like the program to check if there are enough points 
    # and angles to form a polygon and to check if all coordinates are 
    # numbers. If this requirement is not met, the program prints an 
    # error message. 
    def creation(self): 
     if not isinstance(coordinate_x, (int,float)): 
      #raise Exception("That is not a number") 
     if Polygon.number_points <= 3: 

     ` 

Идея, что у меня было то, что я хранить координаты в списке, а затем, когда пользователь вводит достаточное количество очков, многоугольник может быть сформирована.

Я не родной, так что если мне нужно, чтобы очистить вещи немного дальше, не стесняйтесь спрашивать :) спасибо за любые возможные ответы :)

ответ

0

Я вижу ошибку здесь:

Polygon.number_points = Polygon.number_points + 1 
Nkotnik.number_angles = Polygon.number_angles + 1 

Nkotnik должно быть Polygon. Кроме того, чтобы сделать его короче, вы можете сделать Polygon.number_points += 1 и то же самое для number_angles.

Итак, создание программы:

def creation(self): 

Это плохой дизайн. Функция должна принимать количество точек и количество углов в качестве параметров. Итак, сделайте следующее:

def creation(self, points, angles): 

Но creation в основном initialization, поэтому вы должны включить его в свой __init__.

Кроме того, ваш __init__ странный. number_points и number_angles должны быть определены в __init__, а не в объекте, поскольку эти переменные различны для разных объектов Polygon. Поэтому после модификации ваш код выглядит следующим образом:

class Polygon: 
    def __init__(self, coord_list, angles): 
     if len(coord_list) // 2 < 3: 
      raise Exception("Side count must be 3 or more.") 
     s = [] 
     self.number_points = 0 
     self.number_angles = 0 
     self.coordinates_x = coord_list[::2] 
     self.coordinates_y = coord_list[1::2] 
     self.angles = angles 
     self.s = s.append([coordinate_x, coordinate_y]) 
     self.number_points += len(coord_list // 2) 
     self.number_angles += len(angles) 
num_sides = int(input('Number of sides: ')) #raw_input if you're using Python 2 
points = [] 
angles = [] 
for i in range(num_sides): 
    points.append(int(input('X value of point: '))) 
    points.append(int(input('Y value of point: '))) 
for i in range(num_sides): 
    angles.append(int(input('Angle value: '))) 
polygon_object = Polygon(points, angles) 

И все готово!

+0

Благодарим Вас за Ваш вклад! что делает эта последняя строка (polygon_object = Polygon (точки, углы))? : D – Jerfislav

+0

@Jerfislav Создает объект Polygon и присваивает его переменной, поэтому вы можете получить к ней доступ позже. –

0

Вы можете сделать проверку во время создания в классе, как это, и вам нужно больше, чем просто угол, чтобы определить точку

import collections 

PointCartesian = collections.namedtuple("PointCartesian","coordinate_x coordinate_y") 
PointPolar = collections.namedtuple("PointPolar","magnitude angle") 
#this is a easy way to make a class for points, that I recommend have 
#a class too 

class Polygon(object): 
    def __init__(self,*argv,**kargv): 
     points = list() 
     for elem in argv: 
      if isinstance(elem,(PointCartesian,PointPolar)): 
       points.append(elem) 
      else: 
       raise ValueError("Element "+str(elem)+" of wrong type") 
     if len(points) <3: 
      raise ValueError("Insufficient data") 
     self.points = points 

и в другом месте вы имеете программу, которая просит пользователя для данных вы можете проверить каждый вход или оставить его в классе.

назвать это сделать что-то вроде этого

Polygon(PointCartesian(1,2),PointCartesian(4,7),PointPolar(5,28.2)) 
Polygon(*list_of_points) 
Смежные вопросы