Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   Python: een vraagje (https://forum.scholieren.com/showthread.php?t=1776545)

Mewmew 17-10-2009 11:47

Python: een vraagje
 
Ik ben dus bezig met leren in Python te programmeren, en hiervoor ben ik bezig met een opdracht waar ik maar niet uitkom. De opdracht is dat ik de gebruiker een DNA sequentie op laat geven en vervolgens een motief (een stukje sequentie), en dat het progamma dat in de DNA sequentie gaat zoeken en vervolgens zegt of het motief erin voorkomt.

Voor degenen die niks met Biologie hebben; een data sequentie is gewoon een reeks letters, dus ahdbdbfjfj (even voor het gemak, ik hoef nog niet rekening te houden met welke letters wel en niet mogen, dus ik laat alle letters toe), en een motief is dus een stukje daarvan, zoals aanccy (dit motief komt niet in de DNA sequentie voor) of ahd (dit motief komt wel in de DNA sequentie voor.

Ik heb tot nu toe dit:

lijst=[]
seq1=str(input("Geef een DNA - of eiwitsequentie: "))
motief=str(input("Geef een motief: "))
lijst.append(motief)
lijst.index(seq1)
if motief in seq1:
print ("Dit motief zit in de opgegeven sequentie.")
else:
print("Dit motief zit niet in de opgegeven sequentie.")

Maar hij heeft deze error:

Traceback (most recent call last):
File "C:\Progamma's\melanie\test.py", line 37, in <module>
lijst.index(seq1)
ValueError: list.index(x): x not in list

Ik heb al vanalles geprobeert, maar niks helpt. :/ Ik ben een nub programmeur, dus ik hoop dat jullie na 1 oogopslag de fout zien (zoals mijn leraar). Kunnen jullie helpen? :]

Alvast bedankt.

Edit: Ohh de spaties vallen weg als ik het bericht verstuur, nou ja het gaat meer om de code zelf.

Rob 21-10-2009 09:13

Ik kan niet echt Python, maar volgens mij draai je 't om? >_>

lijst.append(motief) stopt je motief in je lijst, hetgene waarnaar je wilt zoeken. Met lijst.index(seq1) probeer je de index op te vragen waar de substring begint die jouw sequence bevat. Je zoekt dan dus in lijst (die gelijk is aan motief) naar je sequence. Als je motief kleiner is dan je sequence, ga je 'm nooit vinden, wat resulteert in de foutmelding.

Moet het niet zoiets als dit zijn?

PHP-code:

sequence str(input("Geef een DNA- of eitwitsequentie: "))
motief str(input("Geef een motief: "))
if 
motief in sequence:
  print (
"Motief gevonden.")
else
  Print (
"Motief niet gevonden."

Strings zijn vaak character arrays of lijsten van characters, dus veel array- of lijstoperaties zijn toepasbaar op strings en de in operator is te gebruiken om te controleren of een substring in een string voorkomt.

Jouw manier kan ook. Dan krijg je zoiets als dit:

PHP-code:

sequence str(input("Geef een DNA- of eitwitsequentie: "))
motief str(input("Geef een motief: "))
try:
  if 
sequence.index(motief) > 0:
  print(
"Motief gevonden.")
  break
except ValueError:
  print(
"Motief niet gevonden."

index werkt door de gevraagde substring op te zoeken en de index terug te geven waarop de substring in de originele string begint en er wordt een ValueError opgegooid wanneer de substring niet aanwezig is. Wil je geen fouten afvangen, gebruiken dan find, want deze gooit geen fouten en keert -1 terug als de substring niet bestaat.

Warsocket 21-10-2009 21:46

Citaat:

Rob schreef: (Bericht 29791394)
index werkt door de gevraagde substring op te zoeken en de index terug te geven waarop de substring in de originele string begint en er wordt een ValueError opgegooid wanneer de substring niet aanwezig is. Wil je geen fouten afvangen, gebruiken dan find, want deze gooit geen fouten en keert -1 terug als de substring niet bestaat.

Als het is voor school, of sowieso omdat je python wilt leren kennen, doe het dan op de python manier

en dat is met
try:
except():

Meerdere dingne in python werken op die manier.

en de filisofie van python is eerst proberen faalt het dan afhandelen

dus een functie div (om te delen)

schrijf je in python gewoon als return a/b

en niet if (b != 0) :
else


etc etc



Eerst proberen en de errors afvangen is de python manier om het te doen. (het kan natuurlijk anders maar dat is niet hoe het "bedoelt" is)

Rob 22-10-2009 08:45

Citaat:

Warsocket schreef: (Bericht 29794250)
Als het is voor school, of sowieso omdat je python wilt leren kennen, doe het dan op de python manier

en dat is met
try:
except():

Meerdere dingne in python werken op die manier.

en de filisofie van python is eerst proberen faalt het dan afhandelen

dus een functie div (om te delen)

schrijf je in python gewoon als return a/b

en niet if (b != 0) :
else


etc etc



Eerst proberen en de errors afvangen is de python manier om het te doen. (het kan natuurlijk anders maar dat is niet hoe het "bedoelt" is)

Ondanks dat het de Python-manier is, zou ik 't niet bij alles een try-except doen. Bij je div voorbeeld zeker, maar bij iets als mewmew's voorbeeld zou ik zelf voor find gaan zodat ik geen fouten af hoef te vangen en dat doe ik niet eens zozeer omdat het een call op de stack bespaard. :p

Het is maar voorkeur, maar ik ben wel benieuwd waar je die filosofie vandaan haalt. Heb je een URL?

Warsocket 22-10-2009 16:54

in docs.python.org [proef ik dezelfde filisofie maar ik had een betere url zal ik nog eens een keer zoeken,

en je hebt bijvoorbeeld een zerodivisionexception, en die zouden ze er niet in stoppen als hun idee was, kijk maar lekker zelf of je deelt door 0.

En de python hass 1 way to do things perl has 20

die kan je gewoon lezen op de site van python
(of ook op docs.python.org)

maar wat betreft die ene call vd stack, als je je daar zorgen om maakt, om die ene pointer extra, dan moet je sowieso niet in python bezig zijn maar in assembler (of misschien c)

Rob 23-10-2009 08:40

Citaat:

Warsocket schreef: (Bericht 29796452)
in docs.python.org [proef ik dezelfde filisofie maar ik had een betere url zal ik nog eens een keer zoeken,

en je hebt bijvoorbeeld een zerodivisionexception, en die zouden ze er niet in stoppen als hun idee was, kijk maar lekker zelf of je deelt door 0.

En de python hass 1 way to do things perl has 20

die kan je gewoon lezen op de site van python
(of ook op docs.python.org)

maar wat betreft die ene call vd stack, als je je daar zorgen om maakt, om die ene pointer extra, dan moet je sowieso niet in python bezig zijn maar in assembler (of misschien c)

Om de stack maak ik mij niet zozeer zorgen, vandaar de :p achter die zin. :p

Bedoel je deze quote?

Citaat:

"To describe something as clever is NOT considered a compliment in the Python culture." Python's philosophy rejects the Perl "there is more than one way to do it" approach to language design in favor of "there should be one—and preferably only one—obvious way to do it".
Daar ben ik 't wel mee eens, maar bij de meeste exception handling vraag ik mij nog wel eens af of ik het wel of niet moet doen. Daarom ben ik wel blij met .NET: als ik exceptions af wil vangen doe ik dat wel en anders niet.

Ik ben en blijf een Python n00b. ;)


Alle tijden zijn GMT +1. Het is nu 20:40.

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