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 :

fonction inverse de functools.reduce


Sujet :

Python

  1. #1
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut fonction inverse de functools.reduce
    Bonjour

    Je d�bute en Python. J'ai �crit cette fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    ## [1,1,0,1] => 13 
    def compute(Bits):
        return functools.reduce(lambda x, y: x*2+y, Bits,0)
    Qui comme son nom ne l'indique pas vraiment, prend une liste compos�e de 0/1 pour calculer l'entier correspondant.
    J'ai �crit la fonction inverse :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    ## 13 => [1,1,0,1]
    def explode(Val):
        q,r = divmod(Val, 2)
        if q == 0 :
            return [r]
        return explode(q)+[r]
    qui prend un entier et l'�crit comme une liste de 0/1.
    Je me demandais s'il n'existe pas une fonction toute faite qui ferait le boulot ?

    Merci
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  2. #2
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par d�faut
    Salut.
    Ca se fait tout simplement avec bin et int :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    >>> bin(13)
    '0b1101'
    >>> int("1101", base=2)
    13
    C'est pr�sent� dans la FAQ.

  3. #3
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 771
    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 771
    Par d�faut
    Salut,

    Citation Envoy� par Trap D Voir le message
    Je me demandais s'il n'existe pas une fonction toute faite qui ferait le boulot ?
    Si le but est de convertir des entiers dans leurs repr�sentations d�cimales et binaires:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    >>> a = 13
    >>> bin(a)
    '0b1101'
    >>> int('1101', base=2)
    13
    >>>
    "reduce" est une op�ration qui vient d'un contexte bien plus compliqu�e.
    Et telle que d�finie, son inverse n'existe pas.

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

  4. #4
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 097
    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 097
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    >>> int("1101", 2)
    13
    >>> bin(13)[2:]
    '1101'
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    >>> "{0:b}".format(13)
    '1101'

  5. #5
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Merci beaucoup pour ces r�ponses, mais j'ai besoin d'une liste (ou d'un tableau) de valeurs 1/0, qui pourront �tre interpr�t�es en vrai/faux.
    Je pense avoir trouv� mon bonheur avec les fonctions de EDA (voir Python EDA Documentation) que j'aurais besoin de toute fa�on d'utiliser
    >>> A = uint2exprs(5,4)
    >>> A
    farray([1, 0, 1, 0])
    >>> A.to_uint()
    5
    Je mets la discussion en r�solu
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  6. #6
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 097
    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 097
    Par d�faut
    Avec ce qu'on t'as donn� il est pas bien difficile de cr�er une liste � partir d'une cha�ne de caract�res.

    Pour faire l'inverse, c'est � dire liste � cha�ne de caract�res, on utilise join

    J'ai pas bien compris l'int�r�t de la liste, car une cha�ne est un objet tout autant it�ratif, et � moins que tu veuilles modifier un �l�ment de ta liste, je conseillerais de rester avec une cha�ne de caract�res.

    Peut-�tre si tu nous en disais plus sur ton probl�me, on pourrait te guider dans un sens conceptuel et non syntaxique.

  7. #7
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    En fait mon but est d'adapter un code Prolog en Python. En Prolog on ne manipule que des listes, donc je me tourne vers les listes.

    Le code r�sout des Sudoku en utilisant des contraintes sur les valeurs logiques. Le solveur utilis� clpb ne connait que 0 et 1, donc si je veux que le nombre A soit diff�rent du nombre B, il faut que un des bits de A soit diff�rent du bit correspondant de B. Voil� pourquoi j'ai besoin de transformer mes nombres en listes (ou en tableaux si c'est plus facile � manipuler).
    Mon espoir est que je puisse adapter ma m�thode Prolog � Python.

    Une premi�re difficult� : en Prolog on peut utiliser des listes dont les �l�ments n'ont pas de valeurs d�finies, on dit "je veux une liste de longueur 4", on �crit length(L, 4) et Prolog me fournit une variable L = [_, _, _, _], les _ signifient que les 4 �l�ments ne sont pas unifi�s (n'ont pas de valeur d�finie). En Prolog, une fois qu'une variable est unifi�e, elle ne change plus de valeur, est-ce qu'on peut faire la m�me chose en Python ?

    Merci de vos r�ponses.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

  8. #8
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 097
    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 097
    Par d�faut
    Je ne connais pas prolog, mais je m'�tais d�j� renseign�, et ce n'est pas la m�me philosophie que python. Je pense qu'il est difficile, de penser prolog en faisant du python.

    Le solveur utilis� clpb ne connait que 0 et 1, donc si je veux que le nombre A soit diff�rent du nombre B, il faut que un des bits de A soit diff�rent du bit correspondant de B.
    La question est pourquoi transformer les nombres en bits et les comparer et pas seulement comparer des nombres entre eux?

    en Prolog on peut utiliser des listes dont les �l�ments n'ont pas de valeurs d�finies, on dit "je veux une liste de longueur 4", on �crit length(L, 4) et Prolog me fournit une variable L = [_, _, _, _], les _ signifient que les 4 �l�ments ne sont pas unifi�s (n'ont pas de valeur d�finie).
    En python on peut cr�er une liste de n �l�ments, mais elle peut �tre modifiable, seulement on ne voit pas l'int�r�t de modifier cette taille si tu contr�les l'index maximum correspondant � la taille de cette liste.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    L = [None for _ in range(4)]
    Ensuite tu peux ins�rer un �l�ment dans cette liste sans probl�me

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    L[0] = 5 # insère la valeur 5 dans la 1ère colonne (indice 0) de la liste L
    En Prolog, une fois qu'une variable est unifi�e, elle ne change plus de valeur, est-ce qu'on peut faire la m�me chose en Python ?
    Donc non, comme dis pr�c�demment, mais on v�rifie que la valeur est None pour ins�rer ou non une valeur.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    element = L[0]
    if not element: # element == None
        L[0] = valeur
    On peut en cr�er une fonction pour rendre cela plus concis.

    J'esp�re t'avoir aid�, mais j'insiste sur le fait que tu devrais �viter les m�mes pens�es pour chaque langage utilis�, car tu auras plus ou moins de difficult� � l'adapter.

  9. #9
    R�dacteur/Mod�rateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par d�faut
    Merci pour tes �claircissements.
    Je suis tout � fait d'accord, on ne pense pas pareil en Prolog et en Python, et �a m'int�resse aussi de d�couvrir un langage nouveau. Je vais donc r�fl�chir � l'adaptation du "concept" � Python. PYEDA � l'air tr�s bien pour �a.
    La question est pourquoi transformer les nombres en bits et les comparer et pas seulement comparer des nombres entre eux?
    J'avais r�pondu � ta question avant que tu ne la poses, le solveur ne connait que vrai/faux (ou 1/0) Si je lui dis que j'ai deux variables diff�rentes A et B, il me donnera deux solutions A = 0, B = 1 ou A = 1 et B = 0. Si je lui dit A \= 3 (\= veut dire litt�ralement non egal) il me dira que 3 n'est pas une valeur correcte.

    J'aurais sans doute encore des questions � poser.

    a+
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
    "Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, �a vous changera les id�es !
    Ma page Prolog
    Mes codes sources comment�s

    Mon avatar : La Madeleine � la veilleuse de Georges de La Tour

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [C#] fonction inverse de Color.ToString().
    Par OpenGG dans le forum C#
    R�ponses: 8
    Dernier message: 08/11/2006, 10h15
  2. fonctions inverse en c
    Par deboraya dans le forum C
    R�ponses: 8
    Dernier message: 18/10/2006, 14h21
  3. Fonction inverse de ASCII
    Par noirot dans le forum Oracle
    R�ponses: 1
    Dernier message: 15/06/2006, 15h30
  4. Fonction inverse de InttoHex
    Par marsupilami34 dans le forum Langage
    R�ponses: 11
    Dernier message: 06/07/2005, 15h04
  5. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et ant�rieur
    R�ponses: 4
    Dernier message: 08/10/2002, 19h31

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