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 :

Expérience de Shannon


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut Expérience de Shannon
    Bonjour,

    Je suis en train d'essayer de compléter ce squelette basé sur l'expérience de Shannon :

    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
    78
    79
    80
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from math import log
    from random import random
     
    #==================== 1ère partie ==============
     
    def IncFreq(distribution:dict, letter:str):
        """ Incrémente le nombre d'occurrences de *letter* dans
            *distribution*.
            
            `distribution est un dictionnaire où une clé est une lettre
            et la valeur associée le nombre d'occurrences de cette lettre.
        """
        if letter in distribution :
            distribution[letter] += 1
        else:
            distribution[letter] = 1
     
    #______________________________________________________________________________
     
    def AnalFreq(distribution:dict, text:str):
        """ Ajoute à *distribution* les nombres d'occurrences des lettres 
            de *text*.
        """
        for letter in text:
            distribution[letter] = IncFreq(distribution, letter)
     
    #______________________________________________________________________________
     
    def string2distribution(text:str) -> dict:
        """ Retourne une nouvelle distribution qui donne les nombres
            d'occurrences des lettres de *text*.
        """
        distribution = dict()
        AnalFreq(distribution, text)
        return distribution
     
    #______________________________________________________________________________
     
    def TotalFreq(distribution:dict) -> int:
        """ Retourne la somme des nombres d'occurrences de *distribution*.
        """
        return sum(distribution.values())
     
    #______________________________________________________________________________
     
    def string2information(text:str) -> float:
        """ Retourne un dictionnaire une clé est une lettre et la valeur
            la quantité d'information portée par cette lettre.
        """
        info = dict()
        distribution = string2distribution(text)
        TotalFreq = TotalFreq(dict)
        for letter in distribution :
            info[letter] = log(TotalFreq/distribution[letter], 2)
        return info
     
    #______________________________________________________________________________
     
    def string2entropy(text:str) -> float:
        """ Retourne l'entropie du jeu de caractères du texte de référence
            *text*.
        """
     
        dist = string2distribution(text)
        entropie = 0
        for letter in dist : 
            entropie -= ((dist(letter)/TotalFreq(dist))*log(dist(letter)/TotalFreq(dist), 2))
        return entropie 
     
     
    #================== PROGRAMME PRINCIPAL =============
     
    if __name__ == '__main__':
     
     
        file = open('fable1.txt', 'r')
        text = file.read()
    J'aimerais savoir si mes premières fonctions sont correctes svp ?

    Cordialement.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Non, elles ne sont pas correctes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    def string2distribution(text:str) -> dict:
    Cette syntaxe est inconnue en Python.

    http://python.developpez.com/cours/apprendre-python3/

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 698
    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 698
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Cette syntaxe est inconnue en Python.

    http://python.developpez.com/cours/apprendre-python3/
    Mais si! C'est les function's annotations introduites en 3.x
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut
    Normalement les définitions sont bonnes car elles étaient déjà incluses dans le squelette. C'est juste pour le corps des fonctions qu'il faudrait me corriger si c'est faux svp.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 698
    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 698
    Par défaut
    Citation Envoyé par Hero13 Voir le message
    Normalement les définitions sont bonnes car elles étaient déjà incluses dans le squelette. C'est juste pour le corps des fonctions qu'il faudrait me corriger si c'est faux svp.
    L’interpréteur vous dira s'il y a des erreurs de syntaxe.
    Après pour tester que ça fonctionne, rien ne remplacera les fonctions de tests (unitaire).

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

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    L’interpréteur vous dira s'il y a des erreurs de syntaxe.
    Après pour tester que ça fonctionne, rien ne remplacera les fonctions de tests (unitaire).

    - W
    Ok merci mais comment fait-on pour ce cas-ci ? Pourriez-vous me donner un exemple de test unitaire svp ?

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il manque la fermeture du fichier à la fin. Et la construction avec "with" serait préférable.

    En regardant rapidement, je n'ai rien vu d'autre.

    Ici les infos sur les "functions annotation": http://docs.python.org/3.3/tutorial/...on-annotations.

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Mais si! C'est les function's annotations introduites en 3.x
    - W
    Là je suis tombé de ma chaise !

    Quelle horreur (avis personnel que je vous autorise à partager), on peut vaguement deviner à quoi ça sert mais certains risquent de penser que cela remplace dorénavant les doc strings.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 698
    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 698
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Là je suis tombé de ma chaise !

    Quelle horreur (avis personnel que je vous autorise à partager), on peut vaguement deviner à quoi ça sert mais certains risquent de penser que cela remplace dorénavant les doc strings.
    Mais non c'est bien! Mais... seulement pour des "interfaces" externes.
    L’idée est d'avoir un "standard" qui permette l'introspection "programmatique" de l'API d'un module/composant.
    Avant l’intégration de cette fonctionnalité dans Python en "standard", pas mal de développeurs avaient du définir leur propre standard +/- incompatibles entres eux. Si vous n'en aviez pas besoin jusqu’à présent, vous pouvez continuer a vivre sans.

    Ok merci mais comment fait-on pour ce cas-ci ? Pourriez-vous me donner un exemple de test unitaire svp ?

    vous avez aussi le forum ALM sur le site développez que vous pouvez consulter.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut
    Citation Envoyé par wiztricks Voir le message

    vous avez aussi le forum ALM sur le site développez que vous pouvez consulter.
    - W
    Merci mais j'ai vraiment du mal là... Et sinon, c'est bien F5 pour voir si ma syntaxe est bonne ?

Discussions similaires

  1. [Débat] Expériences au sujet de .NET
    Par DevX dans le forum Débats sur le développement - Le Best Of
    Réponses: 46
    Dernier message: 25/05/2014, 11h16
  2. [Expérience] Senior, junior, etc...
    Par Glob dans le forum Emploi
    Réponses: 7
    Dernier message: 06/08/2004, 22h27
  3. Retour d'expérience ?
    Par jIdJo dans le forum Maven
    Réponses: 1
    Dernier message: 05/11/2003, 08h33

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