IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Algorithmes à programmer


Sujet :

Python

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut Algorithmes à programmer
    Bonjour,

    J'ai un DM d'Informatique à faire, et j'éprouve quelques difficultés.

    Pourriez-vous me dire si ce que j'ai fait jusqu'à présent est correct ?

    Pourriez-vous corriger ce qui ne va pas s'il vous plaît ?

    Merci beaucoup par avance, j'ai vraiment besoin d'aide...

    Voici ce que j'ai fait (l'énoncé est ci-dessous) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    # Exercice 1 :
     
    def recherche_mot(texte, mot):
    	if len(mot)>len(texte):
    		return -1
    	else:
    		for i in range (len(texte)-len(mot)):
    			for j in range len (mot):
    				if texte[i]==mot[j]:
    		return i
     
     
    def modifier_mot (texte, mot, indice):
    	debut = texte[0:(indice-1)]
    	fin = texte[indice:]
    	return (debut+mot+fin)
     
     
    def chercher_et_remplacer (texte, mot1, mot2):
    	i=recherche_mot(texte,mot1)
    	return (modifier_mot(texte,mot2,i))
     
     
    # Exercice 2 :
     
    def cesar (texte,cle):
    	codage=[]
    	for lettre in range len(texte):
    		nombre=ord(lettre)-65
    		nombre2=(nombre+cle)%26
    		lettre2=chr(nombre2+65)
    		codage.append(lettre2)
    	codage="".join(codage)
    	return(codage)
     
     
    def dechiffrer (texte,cle):
    	codage=[]
    	for lettre in range len(texte):
    		nombre=ord(lettre)-65
    		nombre2=(nombre-cle)%26
    		lettre2=chr(nombre2+65)
    		codage.append(lettre2)
    	codage="".join(codage)
    	return(codage)
     
     
    def chercher (texte, element):
    	for i in range len(texte):
    		if texte[i] == "element":
    			return i
    		else:
    			return -1
     
     
    def nombre_apparitions (texte):
    	L1=texte.split(',')
    	for k in range len(L1):
    		L2[k]=0
    	for lettre in range (len(L1)):
    		if lettre=="L1[0]":
    			L2[lettre] = L2[lettre] + 1
    	return(L1,L2)
     
     
    def tri (L1,L2):
    	for i in range (1, len(L1)):
    		for i in range ((1, len(L2)):
    			tmp1=L1[i]
    			tmp2=L2[i]
    			j=i-1
    			while j<=0 and tmp1>L1[j]:
    				L1[j+1]=L1[j]
    				j-=1
    			L1[j+1]=tmp1
    			L2[j+1]=tmp2
    	return (L1,L2)
    Nom : exo1-dm.png
Affichages : 189
Taille : 123,0 Ko

    Nom : exo2-dm.png
Affichages : 190
Taille : 90,9 Ko

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par pythet Voir le message
    Pourriez-vous me dire si ce que j'ai fait jusqu'à présent est correct ?
    Pour savoir si une fonction fait le boulot attendu, vous définissez un jeu de tests qui vous permet de lancer la fonction avec des arguments prédéfinis et vous comparez ce que retourne la fonction au résultat attendu.

    Citation Envoyé par pythet Voir le message
    Pourriez-vous corriger ce qui ne va pas s'il vous plaît ?
    Ce sont les tests qui permettent de voir ce qui ne va pas.
    Et si vous ne comprenez pas comment corriger ou le pourquoi d'une erreur, çà pourrait être un bon sujet de discussion...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    Merci pour votre réponse.

    Justement, en les testant on s'aperçoit qu'ils ne fonctionnent pas...

    Pourriez-vous donc m'aider à corriger ce qui ne va pas svp ?

    Merci beaucoup par avance et bonne soirée !

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonsoir,

    En imaginant que vous n'avez pas d'autres possibilités que celles présentées lors de vos cours, c'est à dire l'utilisation pur et dur des index et des boucles (sans slices ou autres méthodes de chaînes de caractères).

    Quelques remarques,


    • appelez la fonction len et assignez sa valeur dans une variable dont le nom est bien choisi, tel que length_text, length_word, ...
    • admettez une autre situation, comme text == word et le résultat attendu pour la fonction
    • utilisez la concaténation, pour regrouper une liste de caractères en un mot qui pourra être comparé tel que mot1 == mot2.
    • votre manière de faire ne peut être correcte que si len(mot) vaut 1, donc prendre en considération la remarque précédente en créant un mot par concaténation (opérateur + entre deux caractères)
    • à première vue on y est presque, ce qui veut dire que ce qui vous manque est la concaténation, qui est une base de la construction des chaînes en python


    Je n'ai lu que la 1ère fonction.

    Bonne continuation...

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    Merci pour la réponse !

    C'est cela, nous ne pouvons utiliser que des boucles !

    Donc pour ma première fonction il n'y a que la concaténation à modifier ? Le "contenu" est correct ?

    Merci encore et bonne soirée.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    En tout cas la logique est interrompu dès lors où vous écrivez,

    car vous comparez toujours qu'un seul caractères. Votre objectif est de comparer n caractères où n vaut len(word)

    .

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    C'est effectivement bien là que se situe le problème, je m'en doutais...

    Par contre, je ne vois pas du tout comment le rectifier, car on a déjà une boucle for...

    Pourriez-vous m'expliquer svp ?

    Merci !

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Pas avant d'avoir cherché et proposé une autre manière de penser en suivant mes indications. C'est le prix à payer si vous souhaitez de l'aide.

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    Bien sûr, je comprends !

    Je vous envoie une nouvelle version d'ici quelques minutes.

    Vous serez connecté jusqu'à quelle heure ?

  10. #10
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    J'ai 2 petites questions :

    Quand vous dites :

    "appelez la fonction len et assignez sa valeur dans une variable dont le nom est bien choisi, tel que length_text, length_word, ..." :

    Cela signifie que je dois créer une fonction len avant la première fonction demandée ?

    "admettez une autre situation, comme text == word et le résultat attendu pour la fonction"

    Là je n'ai pas bien compris... A quoi correspond "word" ?

    Merci encore !

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par pythet Voir le message
    Justement, en les testant on s'aperçoit qu'ils ne fonctionnent pas...

    Pourriez-vous donc m'aider à corriger ce qui ne va pas svp ?
    Le code que vous avez posté devrait se planter dès la ligne 8 pour une erreur de syntaxe, car vous y avez écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for j in range len (mot):
    Et Python devrait vous sortir un message d'erreur assez clair en montrant le contenu de la ligne.

    Vous l'avez écrit correctement à la ligne précédente, vous devriez savoir la corriger ainsi que toutes les autres erreurs du même style qu'il y a dans votre code.

    Ensuite, il y a une dizaine de fonctions dans votre code, je ne vais pas lire l'énoncé pour imaginer quels tests leur faire passer: çà c'est votre boulot.

    Et si vous avez des soucis pour comprendre une erreur ou la corriger, à vous de décrire le soucis que vous avez plutôt que de compter sur nous pour le découvrir.

    Le seul intérêt de ce genre d'exercice est de vous faire pratiquer, faire faire votre boulot par d'autres n'a aucun intérêt: autant attendre le corrigé du prof.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Là je n'ai pas bien compris... A quoi correspond "word" ?
    text et word sont du vocabulaire anglais, le traduire devrait vous donner une idée de leur représentation.

    Cela signifie que je dois créer une fonction len avant la première fonction demandée ?
    Créer ? Attention aux termes employés, relisez-vous. La fonction len n'a pas besoin d'être créée, elle existe déjà. Assigner une valeur à une variable est le b-a-ba de tous langages.

    et je ne comprend pas "avant la première fonction demandée", de quoi parlez-vous ?

    Je pense que vous devriez vous reposer

  13. #13
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    J'ai mis des parenthèses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for j in range (len (mot)):
    C'est mieux ?

    Et ensuite, j'ai encore une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    return i
        ^
    IndentationError: expected an indented block

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par pythet Voir le message
    Et ensuite, j'ai encore une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    return i
        ^
    IndentationError: expected an indented block
    Ah ben, il faut vous rappeler que les "blocks" sont fondamentaux à Python... et réfléchir à quel block devrait appartenir cette instruction pour la mettre à sa place.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    J'ai essayé de mettre ce "return" partout, et à chaque fois j'ai ce message d'erreur...

    Je ne comprends pas pourquoi ?

    Merci beaucoup pour votre aide, et désolé d'être si mauvais...

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par pythet Voir le message
    J'ai essayé de mettre ce "return" partout, et à chaque fois j'ai ce message d'erreur...
    Vous n'avez pas essayé partout sauf là où ce serait correct côté "syntaxe"...
    Où devrait-il être "logiquement" (au sens de ce que devrait faire votre code)? A quel block doit il appartenir?

    Je ne comprends pas pourquoi ?

    Merci beaucoup pour votre aide, et désolé d'être si mauvais...
    Si vous ne comprenez pas le blocks et les indentations, il faut ouvrir un tuto. c'est expliqué en long et en large. Et de toutes façons, sans maîtriser ces bases là, impossible de faire vos exercices.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    Merci beaucoup pour le tuto, cela m'a bien aidé !

    Voici donc ce que je propose pour le moment pour le premier programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def recherche_mot(texte, mot):
    	if len(mot)>len(texte):
    		return -1
    	else:
    		for i in range (len(texte)-len(mot)):
    			for j in range (len (mot)):
    				if texte[i]==mot[j]:
    		                        return i
    Est-ce que c'est mieux ?

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par pythet Voir le message
    Est-ce que c'est mieux ?
    Qu'en dit votre interpréteur Python?
    Contrairement à moi, il est bien plus disponible pour répondre à ce genre de question.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Membre éprouvé
    Homme Profil pro
    Vagabong étudiant en annalyse du signal.
    Inscrit en
    Avril 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Vagabong étudiant en annalyse du signal.
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 130
    Par défaut
    Dans votre derniere fonction, si tous les tests echouent, la fonction ne va rien renvoyer. Or j'ai l'impression que vous aimeriez qu'elle renvoi -1.
    Si vous ne precisez rien, elle renverra None et pas -1.
    example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def compare(i,j):
        if i == j:
            return "ils sont egaux"
     
    >>>print(compare(3,3))
    ils sont egaux
    >>>print(compare(3,5))
    None
    Mais ce n'est pas tout. Un mot est dans une chaine si TOUS les caractères de ce mot se trouvent dans la chaine et qu'il s'y trouvent dans l'ORDRE, sans que d'autre caractere s'INTERCALLENT entre. Ici vous testez juste si une lettre au moin est en commun.

  20. #20
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Voici donc ce que je propose pour le moment pour le premier programme
    Vous pourrez pour la suite respecter la convention PEP8, avec une indentation de 4 espaces (et non tabulation), et permettra ainsi une meilleure lisibilité du code.
    Mais ça ne s'arrête pas là, vous pouvez lire cette convention résumée sur ce site.

    Ligne 4, votre else ne sert à rien, car si on entre dans le bloc if, vous quittez la fonction et n'avez aucune chance de continuer dans la fonction.

    Comme dis par mon VDD, que se passera-t-il si on ne trouve pas le mot ? Nous ne retournerons rien ou None (mais ce n'est pas l'effet désiré).

    Pour l'algorithme, il manque toujours la partie concaténation de chaîne, qui permettra une comparaison entre un bloc de caractères de texte et le mot.

    Bonne continuation...

Discussions similaires

  1. programmer un algorithme
    Par lesguignols dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 28/05/2010, 01h40
  2. cours d'algorithme /programmation
    Par bidule123456 dans le forum Etudes
    Réponses: 6
    Dernier message: 08/08/2007, 17h52
  3. cherche l'algorithme d'un programme en language java
    Par rafik larbi dans le forum Langage
    Réponses: 19
    Dernier message: 06/06/2006, 21h05
  4. algorithme pour programmation linéare en nombre entier
    Par kious dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 03/05/2006, 09h17
  5. Programmation algorithme branch and bound en C
    Par mca_183 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 13/01/2006, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo