Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
dakone22 opened this issue Nov 24, 2022 · 0 comments
Open

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

dakone22 opened this issue Nov 24, 2022 · 0 comments

Comments

@dakone22
Copy link

dakone22 commented Nov 24, 2022

for i in range(1, n + 1)

for i in range(1, num_A + 1):

for i in range(1, len(levels_dict) + 1):

Вместо 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()

HasseDiagram/mainWindow.py

Lines 130 to 132 in 516bd62

if len(A) == 0 or len(R) == 0:
raise IOError("Поля ввода не могут быть пустыми.")
else:

HasseDiagram/mainWindow.py

Lines 141 to 145 in 516bd62

raise IOError(
"Бинарное отношение R не является подмножеством декартова "
"произведения множества A на себя. Пожалуйста, задайте R ⊆ A^2.")
else:

HasseDiagram/mainWindow.py

Lines 146 to 151 in 516bd62

for x in R:
if len(x) != 2:
raise IOError(
"Неверное количество элементов в паре, задающей бинарное отношение.")
else:
return [A, R]

(а тут вообще else в неправильном месте висит)

list_unique

HasseDiagram/mainWindow.py

Lines 133 to 138 in 516bd62

# Уникальные элементы в множестве пар, задающих бинарное отношение
list_unique = []
for i in R:
i = list(i)
list_unique.extend(i)
list_unique = list(set(list_unique))

Во-первых, необязательно преобразовывать кортеж (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

if len(A) == 0 or len(R) == 0:

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

return BinaryRelation(self.input()[0], self.input()[1])

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

можно

return BinaryRelation(*self.input())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant