Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / School & Studie / Huiswerkvragen: Exacte vakken
Reageren
 
Topictools Zoek in deze topic
Oud 24-12-2009, 20:07
Mewmew
Avatar van Mewmew
Mewmew is offline
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. :]

Laatst gewijzigd op 25-12-2009 om 22:10.
Met citaat reageren
Advertentie
Oud 28-12-2009, 22:30
Rob
Avatar van Rob
Rob is offline
Post de gehele code eens, want ik heb géén idee wat 'a' is.
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...
__________________
Bad spelling and grammar make me [sic].
Met citaat reageren
Oud 01-01-2010, 12:36
ILUsion
Avatar van ILUsion
ILUsion is offline
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.
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
Met citaat reageren
Oud 20-01-2010, 01:14
RoyalBlue
RoyalBlue is offline
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.
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar

Soortgelijke topics
Forum Topic Reacties Laatste bericht
Software & Hardware Leren programmeren
Bobby1994
54 21-06-2016 21:58
Huiswerkvragen: Exacte vakken [PWS] Een robot bouwen
MoonlightSilver
8 20-11-2011 21:57
Software & Hardware java programmeren - temperatuur converter
ecobest
1 30-08-2007 03:36
Software & Hardware [Linux] Vraagje over shellscripts
the_kiamen
5 08-12-2004 01:24


Alle tijden zijn GMT +1. Het is nu 14:57.