Exercice Python Prepa Problème

Résolu
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
 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 !

6 réponses

Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
0
Utilisateur anonyme
 
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.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
bonjour,
de plus, l'image ne montre pas la partie du code où se trouve l'erreur.
0
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
0
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)
0
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Je viens de tester, en effet cela marche aussi mais est ce que mon problème vient de la ? le fait d'obliger à rentrer une séquence en majuscule ?

Ou plutôt de la manière dont j'ai écris la partie qui gère les majuscules ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
"cela marche aussi"?
qu'as-tu testé, quel résultat as-tu obtenu?
0
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
0
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Si j'ai bien compris dans votre programme, le fait de rentrer une majuscule va nous faire sortir de la boucle while est donc afficher la première chose que j'avais rentré dans l'input
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
essayons alors plus simple:
def autreinput(s):
    s=input("nouvel input?")
s=input("?")
autreinput(s)
print(s)
0
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai fini par trouver par moi-même, merci a vous de m'avoir aidé !
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
parfait, peux-tu alors marquer la discussion comme résolue?
0
Utilisateur anonyme
 
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
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.
0
Utilisateur anonyme
 
Oups, j'ai validé au lieu de prévisualiser, j'ai donc corrigé une grosse erreur de rédaction en gras
0
Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Ca marche avec cette analogie j'ai mieux compris merci de votre temps !
0
Utilisateur anonyme > Nathan19_8690 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
De rien
0