Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Huiswerkvragen: Exacte vakken (https://forum.scholieren.com/forumdisplay.php?f=17)
-   -   [IN] Een programmeur die mij kan helpen? (https://forum.scholieren.com/showthread.php?t=1785441)

Mewmew 24-12-2009 20:07

Een programmeur die mij kan helpen?
 
Hoi, ik ben nu al een week (ja, het is triest) bezig aan een programma en ik sta op het punt om het op te geven.

Het is de bedoeling dat het programma een file inleest die vol staat met een reeks aan elkaar gesloten letters (met alleen de letters A, C, G, en T -voor de kenners: een DNA sequentie dus, is verder niet belangrijk als je dat niet weet, hoor-). Vervolgens geeft de gebruiker een motief (een stukje reeks letters, dus aaac ofzo, ook alleen met A, C, G en T), en dan moet het programma gaan kijken of dit motief in de letterreeks van de file voorkomt. Zo niet, dan moet het programma de letterreeks in de file omdraaien en dan kijken of het motief erin voorkomt. Komt het dan nog niet voor, dan moet het programma alle A's in de file vervangen door T's, de T's vervangen , de C's vervangen door G's en de G's vervangen door C's. Dus als je een file hebt met de reeks ACCCAA dan zou het programma er TGGGTT van moeten maken.

Dit heb ik geprobeert met een dictionary:

dicti={"A" : "t", "T" : "a", "C" : "g", "G" : "c", "a" : "t", "t" : "a", "c" : "g", "g" : "c"}
for letter in document:
if letter == 'A' or 'a' or 'T' or 't' or 'C' or 'c' or 'G' or 'g':
a=(dicti[letter])
print(a)
comp = comp + a

Hij geeft echter een KeyError bij a=(dicti[letter]), om vervolgens te zeggen dat AGAGGCGCGAT (de reeks uit de file) niet in de dictionary staat. Dit is logisch, want in mijn dicitionary staan alleen losse letters. Maar bij een normale string (Een woord/letterreeks, deze wordt behandeld als een list) kan het wel. Dus, hoe moet het dan?

Kan iemand mij helpen? Alvast bedankt. :]

Rob 28-12-2009 22:30

Post de gehele code eens, want ik heb géén idee wat 'a' is. :p
Mijn eerste gok ik dat 'ie over zijn muil gaat door het inconsistente gebruik van single quotes en double quotes, maar dat zou niet mogen in Python omdat beide dezelfde strings zijn...

ILUsion 01-01-2010 12:36

Voor de eenvoud kan je volgens mij best gewoon de tekst viermaal doorzoeken;
  • Op je fragment
  • Op het complement van je fragment
  • Op het omgekeerde fragment (fragment.reverse())
  • Op het omgekeerde gecomplementeerde fragment

Ik weet niet of het hier gaat om een opdracht voor jezelf of als oefening op programmeren, maar in Python zijn er vrij krachtige uitbreidingen voor bioinformatica. Toegegeven: voor jouw doel is dat vrij hard overkill, maar die zullen vast wel iets in die aard hebben staan als wat jij wilt.

http://biopython.org/wiki/Main_Page

Op die site kan je de meeste dingen wel vinden, lijkt me. Je zal een Seq-objectje nodig hebben, daarvan staan de methods hier overzichtelijk.

Als je nog vast zou lopen, post dan misschien je code eens in code-tags, zo kunnen we beter helpen.

RoyalBlue 20-01-2010 01:14

Stel je hebt een file "sequentie.txt"

Code:

ACTGGTAGTAGTGCTGCATCGATGACTAGTAGATGAGATGTAGAGTC
En een functie voor het complementeren van de sequentie.

Code:

def complement(sequence):
    newSeq = ''
    # De sequentie wordt automatisch naar hoofdletters gezet
    sequence = sequence.upper()
    # Casussen
    comp = {'A': 'T',
            'T': 'A',
            'G': 'C',
            'C': 'G'}
   
    for r in sequence:
        # De nieuwe sequentie wordt nu gevuld met nieuwe letters: A = T, T = A, etc.
        newSeq += comp[r]
    # De nieuwe sequentie wordt teruggegeven
    return newSeq

Deze wordt in het begin ingelezen.

Code:

# Openen van de file "sequentie.txt"
try:
        handle = open('sequentie.txt')
except:
        print('File bestaat niet')
# We pakken nu de sequentie uit de file
seq = ''
for r in handle:
        seq += r # Dit zet de sequentie in de variable seq

De gebruiker kan nu een motief opgeven.

Code:

motive = input('Vul een motief in: \n').strip().upper() # Maak ook hoofdletters van motief

# Nu controleren we of het motief in de sequentie voorkomt.
if not motive in seq:
        reversedSeq = seq[::-1] # Nieuwe variable met de sequentie omgedraaid.
        if not motive in reversedSeq:
                newSeq = complement(seq)
                if not motive in newSeq:
                        print('Motief is niet gevonden in gecomplementeerde sequentie')
                else:
                        print('Motief is gevonden in gecomplementeerde sequentie')
        else:
                print('Motief is gevonden in de reverse sequentie.')
else:
        print('Motief is gevonden in de normale sequentie')

Dit is ongeveer een ruwe schets van hoe jouw script eruit zou komen te zien. Ik heb het nog niet getest.


Alle tijden zijn GMT +1. Het is nu 02:18.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.