В общем случае гораздо проще отвечать на вопросы, если вы предоставите конкретное сообщение об ошибке или что-то идет не так.Вот что случилось, когда я попытался запустить вышеуказанное:
Сначала:
`SyntaxError: invalid syntax`
на if seq == POSITIVE
.Что здесь не так?О да, вам не хватает двоеточия после условного.Если добавить, что файл хотя бы разбирает.Итак, давайте попробуем выполнить некоторое кодирование:
# Your code here, then:
feature = DNAFeature()
Запуск, который дает:
TypeError: __init__() takes exactly 3 positional arguments (1 given)
О, хорошо, нам нужно передать некоторые аргументы инициализатору DNAFeature
.Давайте поместим это в + цепочку и назовем это foo:
feature = DNAFeature(1, "foo")
Теперь мы получим:
AttributeError: 'DNAFeature' object has no attribute 'setStrand'
О чем это?ОК, вы не определили setStrand
.(Примечание: вам не нужно это делать. Но об этом позже.) Давайте определим это:
def setStrand(self, strand):
self.strand = strand
Я не хочу разбираться с остальными проблемами скод (подсказка: вам нужно определить переменные перед их использованием), но это то, что вы должны делать.
Правильно, что-то другое. Это плохой код. Я надеюсь, что вы написали класс Range
и что он не был предоставлен как часть курса, потому что если он есть, вы читаете плохо изученный курс,Основная проблема заключается в использовании геттеров и сеттеров - я предполагаю, что вы рождены и воспитаны на Java?В Python вам не нужно писать геттеры и сеттеры для всего, потому что вы всегда можете добавить их позже, если они вам понадобятся.Вместо этого просто используйте атрибуты класса.Посмотрите на следующий код для Range
:
class Range:
def __init__(self, start, end):
self.start = start
self.end = end
def length(self):
return self.end - self.start
def overlaps(self, other):
return not(self.end < other.start or other.end < self.start)
Разве это не намного лучше?Больше никаких неприятных средств доступа, никаких неприятных сравнений в методе overlaps
... Это помогает, если вы выработаете логику, которую пытается реализовать ваш код, прежде чем его реализовать.
Посмотрите, сможете ли вы написать лучшеDNAFeature
сейчас.
Вы все еще не сказали мне, что должен делать getStrand
, но вот то, к чему, я думаю, вы стремитесь.Предположим, что имя цепи, переданное __init__
, имеет форму "+name"
или "-name"
.Затем вы можете сделать следующее:
def __init__(self, strand):
sequence = strand[0] #first character of strand
if sequence == "+":
self.strand = 1
self.sequence= strand[1:]
elif sequence == "-":
self.strand = -1
self.sequence = strand[1:]
else:
self.strand = 0
self.sequence = strand
Посмотрите, сможете ли вы понять, как это работает.