1 van 1

palindroom vraag

Geplaatst: di 01 nov 2016, 12:37
door katrien van den boss
Beste,
 
Hieronder de vraag: met daarbij onder mijn functie (het eerste heb ik al en het 2de heb ik een failure van 1/2 maar als ik wil controleren met de debugger werkt hij niet..)

Opgave
  1. Schrijf een functie DNAPalindroom waaraan een DNA sequentie als argument moet doorgegeven worden. Deze functie moet als resultaat de waarde True teruggeven indien de gegeven DNA sequentie een palindromische sequentie is. Anders moet de waarde False teruggegeven worden. Zo moet de functie voor de DNA sequentie GAATTC de waarde True teruggeven.
  2. Gebruik de functie DNAPalindroom om een functie langstePalindroom te schrijven. Aan deze functie moet een DNA sequentie als argument doorgegeven worden. De functie moet de langste palindromische deelsequentie van de gegeven sequentie als resultaat teruggeven. Om de langste palindromische deelsequentie te vinden, kan je alle mogelijke deelsequenties van de gegeven DNA sequentie overlopen, testen of het gaat om een palindromische sequentie, en uiteindelijk het langste palindroom overhouden. Om alle mogelijke deelsequenties van een gegeven DNA sequentie te doorlopen, kan je alle mogelijke startposities doorlopen en voor elke mogelijke startpositie alle mogelijke stopposities doorlopen. Op die manier vind je elke deelsequentie als de sequentie tussen elke combinatie van mogelijke start- en stopposities.
Voorbeeld
>>> DNAPalindroom('GAATTC')
True
>>> DNAPalindroom('AGACTCT')
False
>>> langstePalindroom('CCCCCCCCGAATTCTTTTATTTT')
'GAATTC'
>>> langstePalindroom('')
'' 
 
MIJN CODE:
def DNAPalindroom(woord):
    '''
    >>> DNAPalindroom('GAATTC')
    True
    >>> DNAPalindroom('AGACTCT')
    False
    '''
    nieuwezin = ''
    for letter in woord:
        if letter == 'G':
            nieuwezin += 'C'
        elif letter == 'A':
            nieuwezin += 'T'
        elif letter == 'T':
            nieuwezin += 'A'
        else:
            letter == 'C'
            nieuwezin += 'G'
    if nieuwezin == woord[::-1]:
        return True
    
    return False
 
def langstePalindroom(woord):
    '''
    >>> langstePalindroom('CCCCCCCCGAATTCTTTTATTTT')
    'GAATTC'
    >>> langstePalindroom('')
    ''
    '''
    nieuwezin = ''
    for begin in range(len(woord)): #nu begint deze met een begin is O en gaat hij daarna de andere for loop in!
        for einde in range(begin, len(woord)):#hij neemt het begin over van de vorige [0,1],[0,2],[0,3]
            if DNAPalindroom(woord[begin, einde]):
                if len(nieuwezin) < len(woord[begin,einde]):
                    nieuwezin = woord[begin,einde]
    return nieuwezin
             
 
if __name__ == '__main__':
    import doctest
    doctest.testmod()
 
MVG

Katrien

Re: palindroom vraag

Geplaatst: di 01 nov 2016, 14:03
door EvilBro
Moet woord[begin, einde] niet woord[begin:einde] zijn?

Re: palindroom vraag

Geplaatst: wo 02 nov 2016, 12:30
door EvilBro
Je zou het ook zo kunnen doen:

Code: Selecteer alles

def complement(dna):
	pairs = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
	return ''.join(map(lambda x: pairs[x], dna))
	
def dnaPalindroom(dna):
	return complement(dna) == dna[::-1]
	
def langstePalindroom(dna):
	for lengte in range(len(dna), 0, -1):
		for begin in range(0, 1 + len(dna) - lengte):
			fragment = dna[begin:begin + lengte]
			if dnaPalindroom(fragment):
				return fragment
	return ''
	
print(langstePalindroom('CCCCCCCCGAATTCTTTTATTTT'))
print(langstePalindroom('CA'))