RozeQz / HasseDiagram

Программа визуализации упорядоченных множеств с помощью Диаграммы Хассе.
MIT License
1 stars 0 forks source link

И остальные мелкие претензии #10

Open dakone22 opened 1 year ago

dakone22 commented 1 year ago

for i in range(1, n + 1)

https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L157 https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/hasseDiagram.py#L47

Вместо for i in range(1, n + 1): i можно использовать for i in range(n): i + 1. Не забудь в теле цикла i на (i + 1) заменить.

Guard condition

Зачем else, если ты и так выкидываешь ошибку?

if guard_condition:
    raise Exception()

do()

https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L130-L132 https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L141-L145

https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L146-L151 (а тут вообще else в неправильном месте висит)

list_unique

https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L133-L138

Во-первых, необязательно преобразовывать кортеж (tuple) в список (list), чтобы добавить его через метод extend, потому что extend просто сделает что-то типа:

def extend(self, new_values):
    for value in new_values:
         __values.append(value)

То есть extend пройдётся по переданному через for, а значит нужно понимать, что ему пойдёт любой итерируемый объект. По кортежу тоже можно через for пройти, ведь он тоже итерируемый, поэтому необязательно его преобразовывать в список для добавления.

Кстати, по факту, вызов list тебе сделает что-то типа следующего:

def list(iter_obj):
    new_list = []
    for obj in iter_obj:
        new_list.append(obj)
    return new_list

(для того, чтобы понимать, как это работает; на самом деле, там не совсем так, как я написал)

Во-вторых, можно было бы стразу сделать множество (set), а не список (list), (но да, у него чуть другие методы, чтобы не путать со списком):

unique_values = set()
for i in R:
    unique_values.update(i)

Правдивость списков / Truthiness of List

https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L130

https://stackoverflow.com/questions/39983695/what-is-truthy-and-falsy-how-is-it-different-from-true-and-false

Пустые коллекции сразу возвращают False:

if not A or not R:

Unpacking

https://github.com/RozeQz/HasseDiagram/blob/516bd62789213100dd5f279b52c86ec01b8524bb/mainWindow.py#L118

https://stackabuse.com/unpacking-in-python-beyond-parallel-assignment/

можно

return BinaryRelation(*self.input())