Exercice Python Prepa Problème
Résolu
Nathan19_8690
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -

Bonjour,
Dans le cadre d'un exercice je dois créer une fonction Comptecysteine qui doit compter le nombre de Cysteine (C) dans une séquence d'ADN après avoir vérifié que c'était bien une chaine d'ADN. (on devait juste avant créer un programme qui permettait de savoir si on avait bien une chaine d'ADN ou non i.e. constitué qu'avec des A C G ou T. Il fallait également que la chaine soit exclusivement en majuscule)
Mon problème étant le suivant : Lorsque que j'exécute mon programme, que je rentre une chaine en minuscule avec la fonction CompteCysteines, on me demande donc de la ressaisir en Majuscule. Une fois rentrée en majuscule cela ne compte plus le nombre de cycstéines alors que si je la rentre directement en majuscule cela compte bien le nombre de cysteines. Si qqn peut bien m'aider j'en serai reconnaissant. Merci
Je sais pas si j'ai été bien clair sinon dites moi merci !
A voir également:
- Exercice adn python
- Citizen code python avis - Accueil - Outils
- Mot secret python pix ✓ - Forum Python
- \R python ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Afficher un message sur python "" ✓ - Forum Python
6 réponses
Bonjour
Pour t’aider, il faut qu’on teste, Pour tester, il faut qu’on puisse copier coller ton code, donc que tu l’aies posté sous forme de texte et pas d’image.
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
Pour t’aider, il faut qu’on teste, Pour tester, il faut qu’on puisse copier coller ton code, donc que tu l’aies posté sous forme de texte et pas d’image.
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
En fait concrètement, il n' a pas d'erreur de syntax ou autre, juste lorsque j'execute la fonction ex: Comptecysteines(ACCGT) on me renvoie : "la sequence est bien une chaine d'ADN et elle contient 2 cysteines"
Mais lorsque j'execute la fonction Comptecysteines(accgt) on me renvoie : "la séquence n'est pas en majuscule veuillez la ressaisir" et lorsque cette fois ci je la rentre en majuscule à la suite on me renvoie "la séquence est bien une chaine d'ADN et elle contient 0 cysteines"
Le programme ne compte plus les cysteines et je ne comprends pas pourquoi
Mais lorsque j'execute la fonction Comptecysteines(accgt) on me renvoie : "la séquence n'est pas en majuscule veuillez la ressaisir" et lorsque cette fois ci je la rentre en majuscule à la suite on me renvoie "la séquence est bien une chaine d'ADN et elle contient 0 cysteines"
Le programme ne compte plus les cysteines et je ne comprends pas pourquoi
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
pour comprendre ce que tu as écrit, teste ceci:
def estmaj(s): while not s.isupper(): s=input("pas maj!, ?") s=input("?") estmaj(s) print(s)
J'ai testé votre programme, ah oui en effet je ne m'étais pas rendu compte
On me demande un input donc je rentre par exemple qqn chose en minuscule et on me dit "pas maj" et tant que je ne rentre pas de maj on me redit "pas maj"
Et dès que je rentre une majuscule, on me renvoie la première chose que j'avais rentré en minuscule
On me demande un input donc je rentre par exemple qqn chose en minuscule et on me dit "pas maj" et tant que je ne rentre pas de maj on me redit "pas maj"
Et dès que je rentre une majuscule, on me renvoie la première chose que j'avais rentré en minuscule
def ADN(cdc): a = cdc.isupper() while a == False: cdc = input("La chaîne d'ADN n'est pas en majuscule, veuillez la resaisir : ") a = cdc.isupper() t = True for i in cdc: if i not in 'ATCG': t = False return False if t: return True
Puis voici le second programme :
def CompteCysteines(n): if ADN(n) == True: h=0 for k in n: if k == 'C': h+=1 print("La séquence est bien une chaîne d'ADN et elle contient" ,h, "cystéines.") else: print("La séquence n'est pas une chaîne d'ADN")
En effet je ne savais pas que l'on pouvait faire comme cela merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon je vais faire deux analogies.
1 Tu veux faire cuire des pates.
Tu sors la casserole, tu l'amènes au robinet et du y verses de l'eau.
Ensuite tu la places sur la gazinière.
Tu sors les pates, tu lis la recette et là tu t'aperçois qu'il faut plus d'eau.
Donc tu rapportes la casserole au robinet et du rajoutes de l'eau.
Dans ce "programme", il y a une fonction RemplirDEau, qui prend en paramètre une casserole et qui retourne cette même casserole avec plus d'eau.
Il y a aussi toi (le programme principal) qui utilise cette fonction une fois, regarde le résultat qui n'est pas suffisant, donc utilise la fonction une nouvelle fois (et pourquoi pas une 3eme, 4eme, etc...)
La façon dont ADN est codée, c'est un peu comme si le robinet allait rechercher la casserole quand il n'y a pas assez d'eau, mais renverse l'eau qu'il vient de rajouter.
2 tu veux boire un café
Tu vas dans un bar, tu commandes un café.
Le serveur te demande si tu veux du sucre avec, tu lui réponds que oui.
Il te sers un café, avec un sachet de sucre en poudre, une cuillère et un chocolat en prime.
Dans ce programme, la fonction PrendreUnCafeAuBar fait tout le boulot à partir du moment où tu l'as lancée.
Elle n'a pas de paramètre, par contre elle pose des questions.
La façon dont ADN est codée, c'est un peu comme si tu passais derrière le bar après avoir passé commande pour Edit vider la tasse et la donner au serveur, avant qu'il ne te demande pour le sucre.
Les 2 façons que je trouve logiques de coder ADN sont possibles et pas compliquées.
Le mode hybride, simplement parce qu'il n'est pas logique, est un peu plus compliqué.
Donc plutôt que corriger le code tel quel, il me semble plus utile pour toi de le rendre plus logique.
Je me base sur ce que tu as décrit dans la question initiale, qui n'est pas l'énoncé à proprement parlé, puisque tu as écrit
Bref, je pense qu'ADN devrait être codé comme le cas des pates => Y'a une autre partie du programme qui demande la chaine à l'utilisateur et demande à ADN de la vérifier. Si c'est pas bon cette partie du programme recommence. Cette partie peut être une fonction ou le programme principal
Mais rien n'empêche (à part peut-être ce qui t'es exactement demandé dans ton énoncé) de le coder comme le cas du café => ADN ne reçoit pas de paramètre, demande la chaine, la vérifie et redemande tant que ça n'est bon bon. A la fin il retourne la chaine correcte.
Le choix entre les 2 méthodes c'est d'abord l'énoncé qui soit
Et dans les 2 derniers cas, c'est à toi de choisir.
Quoi qu'il en soit, une fonction ça fait un travail.
Il faut définir ce travail.
Et une fois défini, la fonction ne fait ce travail et la moitié du travail de l'autre.
1 Tu veux faire cuire des pates.
Tu sors la casserole, tu l'amènes au robinet et du y verses de l'eau.
Ensuite tu la places sur la gazinière.
Tu sors les pates, tu lis la recette et là tu t'aperçois qu'il faut plus d'eau.
Donc tu rapportes la casserole au robinet et du rajoutes de l'eau.
Dans ce "programme", il y a une fonction RemplirDEau, qui prend en paramètre une casserole et qui retourne cette même casserole avec plus d'eau.
Il y a aussi toi (le programme principal) qui utilise cette fonction une fois, regarde le résultat qui n'est pas suffisant, donc utilise la fonction une nouvelle fois (et pourquoi pas une 3eme, 4eme, etc...)
La façon dont ADN est codée, c'est un peu comme si le robinet allait rechercher la casserole quand il n'y a pas assez d'eau, mais renverse l'eau qu'il vient de rajouter.
2 tu veux boire un café
Tu vas dans un bar, tu commandes un café.
Le serveur te demande si tu veux du sucre avec, tu lui réponds que oui.
Il te sers un café, avec un sachet de sucre en poudre, une cuillère et un chocolat en prime.
Dans ce programme, la fonction PrendreUnCafeAuBar fait tout le boulot à partir du moment où tu l'as lancée.
Elle n'a pas de paramètre, par contre elle pose des questions.
La façon dont ADN est codée, c'est un peu comme si tu passais derrière le bar après avoir passé commande pour Edit vider la tasse et la donner au serveur, avant qu'il ne te demande pour le sucre.
Les 2 façons que je trouve logiques de coder ADN sont possibles et pas compliquées.
Le mode hybride, simplement parce qu'il n'est pas logique, est un peu plus compliqué.
Donc plutôt que corriger le code tel quel, il me semble plus utile pour toi de le rendre plus logique.
Je me base sur ce que tu as décrit dans la question initiale, qui n'est pas l'énoncé à proprement parlé, puisque tu as écrit
je dois... on devais....c'est donc ton interprétation de l'énoncé, que j'interprète moi même.
Bref, je pense qu'ADN devrait être codé comme le cas des pates => Y'a une autre partie du programme qui demande la chaine à l'utilisateur et demande à ADN de la vérifier. Si c'est pas bon cette partie du programme recommence. Cette partie peut être une fonction ou le programme principal
Mais rien n'empêche (à part peut-être ce qui t'es exactement demandé dans ton énoncé) de le coder comme le cas du café => ADN ne reçoit pas de paramètre, demande la chaine, la vérifie et redemande tant que ça n'est bon bon. A la fin il retourne la chaine correcte.
Le choix entre les 2 méthodes c'est d'abord l'énoncé qui soit
- te l'impose
- te l'oriente
- te laisse libre
Et dans les 2 derniers cas, c'est à toi de choisir.
Quoi qu'il en soit, une fonction ça fait un travail.
Il faut définir ce travail.
Et une fois défini, la fonction ne fait ce travail et la moitié du travail de l'autre.