Completed HW4 task#18
Conversation
…o aminoacid_tools.py
SidorinAnton
left a comment
There was a problem hiding this comment.
В целом неплохо!
Самый важный момент -- вы все время возвращали строки. Скорее всего вы это делали, чтобы их распечатывать )))
Однако вот представьте, что вы пишете функцию, где вам нужно использовать посчитанные аминокислоты. И вроде у вас даже есть функция для подсчета... но она почему-то возвращает f'Amino acids freq of the sequence {seq}: {amino_acid_count}' :/
Распечатать-то всегда можно ... Можно написать даже отдельную функцию для того, чтобы печатать )))
А вообще молодцы!
| if operation == '': | ||
| raise ValueError('Operation value is not specified') |
There was a problem hiding this comment.
А зачем это проверять? ))
В таком случае operation нужно вызывать всегда (это теперь тип keyword_only_args)
| for seq in seqs: | ||
| is_peptide(seq) | ||
| output = '' | ||
| for seq in seqs: | ||
| output += operation_dict[operation](seq) | ||
| output += '\n\n' |
There was a problem hiding this comment.
- Почему бы
is_peptideне проверять в нижнем for'е? ))) - Зачем output делать строкой а потом добавлять "\n\n"?
По сути этот код нужно было написать вот так:
output = []
for seq in seqs:
is_peptide(seq)
output.append(operation_dict[operation](seq))There was a problem hiding this comment.
- Идея была в том, чтобы сначала сделать проверку последовательностей, и после нее уже вызывать функции. Типа, чтобы после обработки 188-ой последовательности из 190 не вывалилась бы ошибка и все оказалось бы впустую...
Либо как-то обыграть эту историю так, чтобы ошибка тоже записывалась? Например, записывать результаты выполнения функции в словарь в виде { 'sequence' : result } и сюда же записать ошибку в случае ее возникновения? Просто чтобы в любом случае функция сделала какой-то return с тем, что выполнено...
There was a problem hiding this comment.
Вот когда у нас будут ошибки, тогда и разберемся )))
| all_aminoacids = { | ||
| 'A', 'R', 'N', 'D', 'C', 'H', 'G', 'Q', 'E', 'I', | ||
| 'L', 'K', 'M', 'P', 'S', 'Y', 'T', 'W', 'F', 'V' | ||
| } |
There was a problem hiding this comment.
Нужно было сделать константой (ONE_LETTER_AMINOACIDS) и передвинуть вверх
| if set(seq).issubset(all_aminoacids): # if set(seq) <= all_aminoacids | ||
| return True | ||
| raise ValueError(f'Incoming sequence {seq} is not a peptide') |
There was a problem hiding this comment.
А зачем тут кидать ошибку, если мы можем вернуть False? )))
Ну то есть буквально is_peptide --> True / False. У нас же не какой-нибудь check_...
Ну и в таком случае можно было бы сразу сделать
return set(seq).issubset(all_aminoacids)| motif_dict = { | ||
| 'Caspase 3': [['D'], ['M'], ['Q'], ['D']], | ||
| 'Caspase 6': [['V'], ['E'], ['H', 'I'], ['D']], | ||
| 'Caspase 7': [['D'], ['E'], ['V'], ['D']], | ||
| 'Enterokinase': [['D', 'E'], ['D', 'E'], ['D', 'E'], ['K']] | ||
| } |
There was a problem hiding this comment.
А вот это уже какая-то специфичная штука для функции get_cleavage_sites. Непонятно, почему она тут, а не в теле функции
| if hydrophobicity_sum > 0: | ||
| return f"Sequence {sequence}: Hydrophilic" | ||
| elif hydrophobicity_sum < 0: | ||
| return f"Sequence {sequence}: Hydrophobic" | ||
| else: | ||
| return f"Sequence {sequence}: Neutral" |
There was a problem hiding this comment.
Ну и вот опять же, лучше возвращать уж hydrophobicity_sum. Или значения Hydrophilic, Hydrophobic, Neutral
| weight = 18.02 # for the H and OH at the termini | ||
| for amino_acid in seq: | ||
| weight += amino_acid_weights[amino_acid] | ||
| return f'Molecular weight of the sequence {seq}: {round(weight, 2)} Da' |
| from typing import Dict | ||
|
|
||
|
|
||
| def calculate_percentage(seq: str) -> str: |
There was a problem hiding this comment.
неудачно название :(
буквально "посчитать процент" ... чего? )))
| amino_acid_percentages = {} # dict to store each amino acid and its % | ||
| for amino_acid, count in amino_acid_counts.items(): | ||
| percentage = round(((count / total_amino_acids) * 100), 2) | ||
| amino_acid_percentages[amino_acid] = percentage |
There was a problem hiding this comment.
В целом-то вы могли сразу пересчитывать значения в amino_acid_counts
| for amino_acid, count in amino_acid_counts.items(): | ||
| percentage = round(((count / total_amino_acids) * 100), 2) | ||
| amino_acid_percentages[amino_acid] = percentage | ||
| return f'Amino acids percentage of the sequence {seq}: {amino_acid_percentages}' |
There was a problem hiding this comment.
Ну и еще раз -- return amino_acid_percentages
No description provided.