Aller au contenu

Exo python


Wxcvbn753

Messages recommandés

Bonjour,

Je bloque sur 2 exercices, le premier est celui ci 

réaliser une fonction qui compte le nombre fois où le motif passé en paramètre est présent dans la séquence d’ADN passée également en paramètre

exemple: nombre_occurrences_motif('ACG', 'GCTACGGAGCTTCGGAGCACGTAG') 

j'ai ce code mais il ne fonctionne pas

def  nombre_occurrences_motif(motif,séquence):

somme=0
    for i in séquence:
        if i[0:3]==motif:
            somme=somme+i
    return somme

 

Pour le 2ème exercice:

il faut supprimer un caractère donné dans une chain de caractère

exmple: sup_caractere("test", "t") == "es"

j'ai ce code mais pareil je ne trouve pas mon erreur:

def sup_caractere(ch,c):

for i in ch:
        if i==c:
            c=''
    return ch

Si quelqu'un pourrait m'aiguiller... merci beaucoup !

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonjour,

1er exercice

C'est normal que cela ne fonctionne pas. Pour moi, "i in séquence" retourne un seul caractère, donc i[0:3] n'est pas interprété.

Un script qui fonctionne :

def  nombre_occurrences_motif(motif,séquence):
  somme=0
  for i in range(len(séquence)-2): s'arrète avant l'avant-avant dernier terme car on teste une chaine de 3 caractères.
    if séquence[i:i+3]==motif:
      somme=somme+1
  return somme

print(nombre_occurrences_motif('ACG','GCTACGGAGCTTCGGAGCACGTAG'))

N.B. 1: Si le motif a une longueur quelconque, on peut modifier le script comme suit :

def  nombre_occurrences_motif(motif,séquence):
  somme=0
  for i in range(len(séquence)-len(motif)+1):
    if séquence[i:i+len(motif)]==motif:
      somme=somme+1
  return somme

print(nombre_occurrences_motif('AG','GCTACGGAGCTTCGGAGCACGTAG'))

N.B. 2: Attention à bien respecter les indentations.

La suite plus tard, après ta réaction.

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Dans le deuxième script, le motif a un nombre quelconque de caractères, donc, comme dans le premier cas, on s'arrête lorsqu'il ne reste plus que le bon nombre de caractères à traiter, soit la longueur du motif -1. Il y a peut--être une autre démarche possible, à partir du "in séquence", mais je ne la vois pas.

Pour le deuxième exercice,  le c='' ne donne évidemment rien. Le problème, c'est que je ne vois pas comment indicer les éléments de ch, sauf à passer par une liste.

En fait, pour moi, le plus simple est d'utiliser replace, mais là, c'est immédiat :

def sup_caractere(ch,c):
  ch=ch.replace(c,"")
  return ch
    
print(sup_caractere("test", "t"))

 

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

OK, à défaut, utilise le "replace".

Sinon, un truc un peu "bourrin"

def sup_caractere(ch,c):
  n=0 un compteur pour indicer
  for i in ch:
    if i==c:
      ch=ch[:n]+""+ch[n+1:]  on recrée la chaine
      n=n-1 car la chaine a maintenant un caractère de moins
    n=n+1
  return ch
 
print(sup_caractere("test", "t"))

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering