пятница, 13 декабря 2013 г.

Python использование set с классом

Задача: создадим класс, создадим пустой set. Заполним set экземплярами созданного класса. Для примера пусть экземпляры будут случайным целым числом из диапазона 0-9. Теперь мы хотим удалить из set-а все экземпляры класса значения которых совпадают с "9" и "8"

Где это можно применить на практике? В gamedeveloping игра "Астероид", в set добавляем все летающие по экрану камни, пробегаемся по set-у и сверяем дистанцию между кораблем и камнями:
для этого вычисляем дистанцию между координатами центров фигур
>>> def dist(p, q):
>>>     return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
и вычитаем радиус корабля и радиус камня, если получившееся значение <= 0 значит столкновение, то добавляем экземпляр класса камень во временный set. После окончания обхода set-а с камнями - удаляем из этого set-а временный set (один или более камней при столкновении) и уменьшаем счетчик жизней кораблю.


>>> import random

>>> class A:
>>>     def __init__(self, a):
>>>         self.a = a
>>>     def __str__(self):
>>>         return ("%s") % self.a
        
>>> st = set()
>>> for i in range(10):
>>>     st.add(A(random.randrange(0, 10)))

>>> print [str(x) for x in st]
['6', '5', '3', '8', '4', '9', '2', '9', '9', '8']
>>> temp = set()
>>> for x in st:
>>>     if str(x) == '9' or str(x) == '8':
>>>         temp.add(x)

>>> print [str(x) for x in temp]
['8', '9', '9', '9', '8']
>>> st.difference_update(temp)
>>> print [str(x) for x in st]
['6', '5', '3', '4', '2']

Комментариев нет:

Отправить комментарий