Wxcvbn753 Posté(e) le 12 novembre 2020 Signaler Share Posté(e) le 12 novembre 2020 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 ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 12 novembre 2020 E-Bahut Signaler Share Posté(e) le 12 novembre 2020 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Wxcvbn753 Posté(e) le 12 novembre 2020 Auteur Signaler Share Posté(e) le 12 novembre 2020 OK je comprend maintenant pourquoi ça ne fonctionnait pas mais juste une question concernant le 2ème script, pourquoi faire -len(motif) dans range ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 12 novembre 2020 E-Bahut Signaler Share Posté(e) le 12 novembre 2020 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")) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Wxcvbn753 Posté(e) le 12 novembre 2020 Auteur Signaler Share Posté(e) le 12 novembre 2020 Nous n'avons toujours pas vu les listes donc je ne pense pas que je dois les utiliser mais merci quand même Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 12 novembre 2020 E-Bahut Signaler Share Posté(e) le 12 novembre 2020 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")) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.