2015-11-26 1 views
1

Je suis un programmeur amateur (mon réel ma réelle actuelle est la biologie), donc je m'excuse si le code est atroce.La fonction de recherche Python ne fonctionne pas. Qu'est-ce que je fais mal?

De toute façon, je fais un exercice rosalind.info (http://rosalind.info/problems/subs/) qui veut que je trouve tous les index où un motif d'ADN spécifique est contenu dans une plus grande séquence d'ADN. Fondamentalement, j'ai besoin de trouver les index d'une sous-chaîne dans une chaîne. Devrait être facile, non? Eh bien, peut-être que vous pouvez m'aider.

Alors, voici mon code:

with open('rosalind_subs.txt') as f: 
    seq = f.readline() 
    seq.strip() 
    subs = f.readline() 
    subs.strip() 
    break 

def finder(x, y): 
    index = x.find(y) 
    return index 

print("sequence is: " + seq) 
print("subs is: " + subs) 

print(finder(seq, subs)) 

Et voici ma sortie:

sequence is: ACCAGTCTCTTTTTTCTCTTTTCTCTTTTCTCTTTTGACCCTCTTTTCGTCACTCTTTTACCTCTTTTTCTCTTTTACTCTTTTCTCTTTTACTCTTTTACTCTTTTAGCGCAGATCTCTTTTCTCTTTTGGCTCTTTTGTCATCCTCTTTTAGACTCTTTTGGGAAGCGACGCCTCTTTTCTCTTTTCTCTTTTGCCTCTTTTTATAACCTAAAAGACTCTTTTCCCTCTTTTCCGATTTGCCAAGGGCTCTCTTTTCTCTTTTGCTCTTTTCTCTTTTCTCTTTTTACTCTTTTCTCTTTTCGCCCCAAGATTAACTCTTTTTCTCTTTTCTCTCTTTTTTCCTCTTTTCTCTTTTGAATTGACCTCTTTTTCTCTTTTTTTGGGCCGCTCTTTTCTCTTTTACTCTTTTCTCTCTTTTAACAGCTCTTTTCCTTCTCTTTTGTCTCTTTTAGTATACTCTTTTACTCTTTTCTCTTTTCTCTCTTTTACTCTTTTGCTCTTTTCTCTTTTTGTCTCTTTTGCCCTGTCTCTTTTCACGCTTCTCTTTTAGTGTACTCTTTTACTCTTTTTGGCTCTTTTCGAATTTGTTAGCTCTTTTGCTCTTTTCTCTTTTGCTCTTTTGTCTCTTTTGATCAGATTCTCTTTTTCTCTTTTCTCTTTTCCTTAAGCAGATTTCTCTTTTCTCTTTTTCTCTCTTTTGCTCTTTTACTCTTTTACTGCTTTCTCTTTTACAACCTCTTTTACTCTTTTAAGCTCTTTTCTCTTTTGCGCCTCTTTTCCTCCCCTCTTTTTAGCTCTTTTCTCTTTTTCGCTCTTTTCAGCTCTTTTCACTCTTTTGTTTTGAGCTCTTTTCAGACTCTTTTATCCTCTTTTTTCCTCTTTTAGCGCTCTTTTGTAGCCTCTTTT 

motif is: CTCTTTTCT 

-1 

***Repl Closed*** 

Je quitte le ***Repl Closed*** là dans un effort pour ne négliger aucun effort. Peut-être que cela a quelque chose à voir avec Sublime REPL?

De toute façon, vous ne pouvez probablement pas dire juste en regardant, mais le motif est effectivement trouvé BEAUCOUP de fois dans la séquence d'ADN, c'est juste la fonction de recherche ne reprend pas dessus. Ce qui donne?

+2

Vous pourriez peut-être imprimer seq et subs après la boucle while. En fait, je ne comprends pas la boucle while car elle va casser au premier itération. –

+0

Ce code ne sera pas exécuté car l'indentation n'a pas de sens. L'indentation est importante en python, même lorsque vous l'affichez sur SO. – khelwood

+2

'seq.strip()' ne change pas 'seq'. Il renvoie une chaîne que vous rejetez. – interjay

Répondre

1

La coupure n'est pas applicable avec la portée. S'il vous plaît retirer et essayez-le. J'ai testé le code ci-dessous.

with open('rosalind_subs.txt') as f: 
    seq = f.readline() 
    seq.strip() 
    subs = f.readline() 
    subs.strip() 

def finder(x, y): 
    index = x.find(y) 
    return index 

print("sequence is: " + seq) 
print("subs is: " + subs) 

print(finder(seq, subs)) 

La sortie est

>>> 
sequence is: ACCAGTCTCTTTTTTCTCTTTTCTCTTTTCTCTTTTGACCCTCTTTTCGTCACTCTTTTACCTCTTTTTCTCTTTTACTCTTTTCTCTTTTACTCTTTTACTCTTTTAGCGCAGATCTCTTTTCTCTTTTGGCTCTTTTGTCATCCTCTTTTAGACTCTTTTGGGAAGCGACGCCTCTTTTCTCTTTTCTCTTTTGCCTCTTTTTATAACCTAAAAGACTCTTTTCCCTCTTTTCCGATTTGCCAAGGGCTCTCTTTTCTCTTTTGCTCTTTTCTCTTTTCTCTTTTTACTCTTTTCTCTTTTCGCCCCAAGATTAACTCTTTTTCTCTTTTCTCTCTTTTTTCCTCTTTTCTCTTTTGAATTGACCTCTTTTTCTCTTTTTTTGGGCCGCTCTTTTCTCTTTTACTCTTTTCTCTCTTTTAACAGCTCTTTTCCTTCTCTTTTGTCTCTTTTAGTATACTCTTTTACTCTTTTCTCTTTTCTCTCTTTTACTCTTTTGCTCTTTTCTCTTTTTGTCTCTTTTGCCCTGTCTCTTTTCACGCTTCTCTTTTAGTGTACTCTTTTACTCTTTTTGGCTCTTTTCGAATTTGTTAGCTCTTTTGCTCTTTTCTCTTTTGCTCTTTTGTCTCTTTTGATCAGATTCTCTTTTTCTCTTTTCTCTTTTCCTTAAGCAGATTTCTCTTTTCTCTTTTTCTCTCTTTTGCTCTTTTACTCTTTTACTGCTTTCTCTTTTACAACCTCTTTTACTCTTTTAAGCTCTTTTCTCTTTTGCGCCTCTTTTCCTCCCCTCTTTTTAGCTCTTTTCTCTTTTTCGCTCTTTTCAGCTCTTTTCACTCTTTTGTTTTGAGCTCTTTTCAGACTCTTTTATCCTCTTTTTTCCTCTTTTAGCGCTCTTTTGTAGCCTCTTTT 

subs is: CTCTTTTCT 
15 
0

également un compagnon de biologiste ici who has done several rosalind.info exercises. Tout d'abord, votre code à lire dans la séquence et le motif pourraient être améliorés en utilisant splitlines(), qui prend soin d'enlever le retour à la ligne. Notez également comment j'utilise tuple unpacking pour affecter à la fois les variables seq et motif à la fois.

with open('rosalind_subs.txt') as f: 
    seq, motif = f.read().splitlines() 

Ensuite, vous correctement remarqué que find retourne seul l'index de la première occurrence de votre motif. Pour trouver tous les les occurrences, il est utile de savoir que find prend un autre argument optionnel start. Si vous fournissez cela, il commence à regarder à partir de cette position d'index. Utilisez ceci dans une boucle et vous obtenez tous vos index.

Une autre approche consiste à utiliser regular expressions. Méfiez-vous que les motifs peuvent se chevaucher, vous devez donc utiliser un lookahead assertion.