-
Notifications
You must be signed in to change notification settings - Fork 45
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
Completed HW4 task #18
base: main
Are you sure you want to change the base?
Conversation
…o aminoacid_tools.py
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В целом неплохо!
Самый важный момент -- вы все время возвращали строки. Скорее всего вы это делали, чтобы их распечатывать )))
Однако вот представьте, что вы пишете функцию, где вам нужно использовать посчитанные аминокислоты. И вроде у вас даже есть функция для подсчета... но она почему-то возвращает 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А зачем это проверять? ))
В таком случае 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Почему бы
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Идея была в том, чтобы сначала сделать проверку последовательностей, и после нее уже вызывать функции. Типа, чтобы после обработки 188-ой последовательности из 190 не вывалилась бы ошибка и все оказалось бы впустую...
Либо как-то обыграть эту историю так, чтобы ошибка тоже записывалась? Например, записывать результаты выполнения функции в словарь в виде { 'sequence' : result } и сюда же записать ошибку в случае ее возникновения? Просто чтобы в любом случае функция сделала какой-то return с тем, что выполнено...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот когда у нас будут ошибки, тогда и разберемся )))
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нужно было сделать константой (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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А зачем тут кидать ошибку, если мы можем вернуть 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А вот это уже какая-то специфичная штука для функции 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну и вот опять же, лучше возвращать уж 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' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
И опять return weight
from typing import Dict | ||
|
||
|
||
def calculate_percentage(seq: str) -> str: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
неудачно название :(
буквально "посчитать процент" ... чего? )))
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В целом-то вы могли сразу пересчитывать значения в 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну и еще раз -- return amino_acid_percentages
No description provided.