Exercice Python Prepa Problème

Résolu/Fermé
Nathan19_8690 Messages postés 17 Date d'inscription dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022 - 27 mars 2022 à 00:12
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 27 mars 2022 à 20:49


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 dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 00:13
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 928
27 mars 2022 à 08:08
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 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
27 mars 2022 à 11:57
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 dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022 > yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
Modifié le 27 mars 2022 à 12:15
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 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
27 mars 2022 à 12:06
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 dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
Modifié le 27 mars 2022 à 12:37
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 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > Nathan19_8690 Messages postés 17 Date d'inscription dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 13:11
"cela marche aussi"?
qu'as-tu testé, quel résultat as-tu obtenu?
0
Nathan19_8690 Messages postés 17 Date d'inscription dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022 > yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
27 mars 2022 à 13:22
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 dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022 > Nathan19_8690 Messages postés 17 Date d'inscription dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 13:25
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 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > Nathan19_8690 Messages postés 17 Date d'inscription dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 13:27
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 dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 12:09
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 dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 16:53
J'ai fini par trouver par moi-même, merci a vous de m'avoir aidé !
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
27 mars 2022 à 17:01
parfait, peux-tu alors marquer la discussion comme résolue?
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 928
Modifié le 27 mars 2022 à 17:15
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
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 928
27 mars 2022 à 17:15
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 dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 18:11
Ca marche avec cette analogie j'ai mieux compris merci de votre temps !
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 928 > Nathan19_8690 Messages postés 17 Date d'inscription dimanche 27 mars 2022 Statut Membre Dernière intervention 27 mars 2022
27 mars 2022 à 20:49
De rien
0