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 :

Conversion binaire en décimal


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Par défaut Conversion binaire en décimal
    Bonjour tout le monde!! en lisant mon syllabus d'info (étant étudiante), j'ai buguée sur un petit programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> def bin2dec(b):
    	i=0
    	n=len(b)
    	puissance=0
    	index=-1
    	while index>=-n:
    		if b[index]=='1':
    			i= i + 2**puissance
    		elif b[index]!='0' :
    			return None
    		puissance= puissance +1
    		index=index-1
    	return i
    je comprends tout sauf la ligne "elif...".Pour moi ça veut dire: si la chaine à une indice est différent de 0 mais si il l'est, il est obligatoirement = 1?? dc cet instruction n'est jamais executée et que fait le programme lorsque la chaine à un indice= 0?

    Merci à tous!

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    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 049
    Par défaut
    Euh... j'ai pas tout compris, vous pouvez réexpliquer correctement?

    1) Quelles sont vos attentes (allez droit au but), on gagnera du temps
    2) Pourquoi lire ce code?
    3) Quelle version python utilisez-vous?

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Par défaut oups
    Désolée, c'est vrai que j'ai été un peu vite.
    Donc je voudrais transformer un nombre binaire en décimal avec Python 2.6.
    lorsque le caractère de ma chaine de départ est '1' alors 2**puissance s'execute mais lorsque le caractere est '0' alors que se passe t il? car j'ai l'impression que ce cas n'est pas envisagé.
    Il l'est? je ne le vois pas

    Merci pour votre patience.

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut

    Citation Envoyé par lulien Voir le message
    je comprends tout sauf la ligne "elif...".Pour moi ça veut dire: si la chaine à une indice est différent de 0 mais si il l'est, il est obligatoirement = 1?? dc cet instruction n'est jamais executée et que fait le programme lorsque la chaine à un indice= 0?
    Si le caractère est '1' on multiplie i par 2 et on ajoute 1.
    Si ne caractère n'est ni '1' ni '0' on retourne None
    Si le caractère est '0' on multiplie i par 2.

    On peut faire plus simple en python et surtout plus lisible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def bin2dec(string):
        result = 0
        for car in string:
            result *= 2
            if car == '1':
                result += 1
            elif car == '0':
                pass
            else:
                return None
        return result

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Par défaut python décimal
    ok dc si j'ai bien compris, dans mon programme au dessus, lorsque que le caractère est "0", les conditions ne sont pas remplies dans if et dans elif dc on passe directement à la suite (puissance=puissance+1)?

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    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 049
    Par défaut
    Sinon juste pour info, python à une fonction toute faite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def bin2dec(bin):
        return int(bin, 2)
     
    print bin2dec(raw_input("Entrer votre valeur binaire :"))
     
    #Entrer votre valeur binaire :100010010
    #274
    ou sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def bin2dec(bin):
        decnum = 0
        for i in bin:
            decnum = decnum * 2 + int(i)
        return decnum
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def bin2dec(bin):
        decnum = 0
        for i in bin:
            decnum = (decnum << 1) | int(i)
        return decnum

  7. #7
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par lulien Voir le message
    ok dc si j'ai bien compris, dans mon programme au dessus, lorsque que le caractère est "0", les conditions ne sont pas remplies dans if et dans elif dc on passe directement à la suite (puissance=puissance+1)?
    C'est exactement ça. Mais l’algorithme est quand même inutilement compliqué.

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    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 049
    Par défaut
    La fonction bin() (fonction standard python) étant 10 fois plus rapide

    Celle de pfeuh est 4 fois moins rapide que la fonction standard

  9. #9
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Il n’es pas surprenant que la fonction “embarquée” soit plus performante, puisqu’elle est probablement en C, mais je pense que lulien fait plutôt un genre d’exercice, là…

    À ce propos, vos algorithmes, pfeuh et fred1599, sont un peu “vicieux” et donc délicats à comprendre, car ils prennent la binaire à l’envers (i.e. en commençant par le bit de poids le plus fort), alors que celui de lulien est plus “naturel”.

    Et pour répondre à sa question, le cas b[index]=='0' est “sous-entendu”, autrement dit, puisqu’il n’y a rien de spécial à lui appliquer, on n’en parle pas de façon explicite –*mais la puissance est quand même incrémentée, et l’index, décrémenté.

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Oui, la branche elif n'est présente que pour rendre la fonction un peu plus robuste; elle n'est pas nécessaire pour la conversion binaire -> décimal en tant que telle. Normalement, celui qui appelle la fonction est censé passer une chaîne de caractères qui ne contient que des '0' et des '1', mais on ne peut pas le garantir. Donc ici, on décide qu'il est plus sensible de renvoyer None si la chaîne contient autre chose que des 0 et des 1, plutôt qu'un résultat fantaisiste.

Discussions similaires

  1. conversion binaire en décimal
    Par ferhaoui dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/03/2012, 18h35
  2. Algorithme conversion binaire décimal
    Par slouma03 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 14/02/2011, 15h47
  3. Conversion double binaire vers décimal
    Par mess-mate dans le forum C++
    Réponses: 17
    Dernier message: 07/12/2008, 00h44
  4. Conversion d'un nombre binaire en décimal
    Par grungy-soul dans le forum Général Java
    Réponses: 7
    Dernier message: 28/05/2008, 09h23
  5. conversion binaire-décimal sans utiliser le tableau
    Par ahmed doua dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 13/03/2006, 10h54

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