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 :

cle de securite sociale


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Points : 68
    Points
    68
    Par défaut cle de securite sociale
    bonjour,
    je fais un petit exe pour retrouver la cle du n° de secu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    nd = 1721099131271
    a = nd/97
    b= nd%97
    c=97-b
    print c
    que rajouter pour que, si le résultat est inférieur à 10, s'affiche non pas 2 mais 02
    merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Points : 68
    Points
    68
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if c<10:
        print ? + c
    merci pour le ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Salut,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    nd = 1721099131271
    a = nd/97
    b= nd%97
    c=97-b
    if c<10:
        c = "0" + str(c)
     
    print c
    ou mieux, avec le formatage de chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    nd = 1721099131271
    a = nd/97
    b= nd%97
    c=97-b
    print "%02i"%c

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Il vaut mieux utiliser le formatage des chaînes, c'est plus court, et plus propre.

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nd = 1421099131271
    print str(97-nd%97).zfill(2)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Points : 68
    Points
    68
    Par défaut
    j'oublie tjrs de transformer un int en str
    focement un int+str ca peut pas fonctionner
    merci
    Il vaut mieux utiliser le formatage des chaînes, c'est plus court, et plus propre.
    ok

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Points : 68
    Points
    68
    Par défaut zfill
    ?????
    c'est dans 3.0?
    je connais pas...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 144
    Points : 68
    Points
    68
    Par défaut
    str.zfill(width)

    Return the numeric string left filled with zeros in a string of length width. A sign prefix is handled correctly. The original string is returned if width is less than len(s).

    New in version 2.2.2.
    oupsssss....
    je connaissais pas.

  9. #9
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    c'est dans 3.0?
    oui
    http://docs.python.org/3.1/genindex-Z.html





    Il vaut mieux utiliser le formatage des chaînes, c'est plus court, et plus propre.
    Personnellement, je ne sais pas ce qu'on entend par propreté d'un code.
    Pour moi, "%02i"%c est moins immédiatement lisible et compréhensible. Je trouve que "%02i"%c symbolise tandis que str(97-nd%97).zfill(2) parle.



    Par contre, le formatage de chaîne est effectivement plus rapide, comme le dit rambc. Mais c'est encore mieux de le justifier. À l'occasion, j'ai comparé diverses méhodes:

    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
    from time import clock
     
    nd = 1421099131271
     
    a,b,c,d,e,f,g = [],[],[],[],[],[],[]
     
    dico = dict(zip(range(97),[str(u).zfill(2) for u in xrange(97)]))
    didir = dict(zip(range(97),[str(97-u).zfill(2) for u in xrange(97)]))
     
    n = 400
    print 'sur',n,'iteratiuons de 10000 tours'
    for fois in xrange(n):
     
        te = clock()
        for i in xrange(10000):
            y = 97-nd%97
            x = ('0'+str(y),str(y))[y>9]
        tf = clock()
        a.append(tf-te)
     
        te = clock()
        for i in xrange(10000):
            x = str(97-nd%97).zfill(2)
        tf = clock()
        b.append(tf-te)
     
        te = clock()
        for i in xrange(10000):
            y = 97-nd%97
            x = str(y)
            if y<10:  x = '0' + x
        tf = clock()
        c.append(tf-te)
     
        te = clock()
        for i in xrange(10000):
            x = "%02i"%(97-nd%97)
        tf = clock()
        d.append(tf-te)
     
        te = clock()
        for i in xrange(10000):
            x = str(197-nd%97)[1:]
        tf = clock()
        e.append(tf-te)
     
        te = clock()
        for i in xrange(10000):
            x = dico[97-nd%97]
        tf = clock()
        f.append(tf-te)
     
        te = clock()
        for i in xrange(10000):
            x = didir[nd%97]
        tf = clock()
        g.append(tf-te)
     
     
    print min(a),'  x = str(97-nd%97).zfill(2)'
    print min(b),"  x = (str(x),'0'+str(x))[x>9]"
    print min(c),"  x = str(y)   if y<10:  x = '0' + x"
    print min(d),'  x = "%02i"%(97-nd%97)'
    print min(e),"  x = str(197-nd%97)[1:]"
    print min(f),'  x = dico[97-nd%97]'
    print min(g),'  x = didir[nd%97]'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sur 400 iteratiuons de 10000 tours
    0.142065262484   x = str(97-nd%97).zfill(2)
    0.12316369818   x = (str(x),'0'+str(x))[x>9]
    0.107345486647   x = str(y)   if y<10:  x = '0' + x
    0.0812661944465   x = "%02i"%(97-nd%97)
    0.0810742706126   x = str(197-nd%97)[1:]
    0.0497462666345   x = dico[97-nd%97]
    0.0365543665466   x = didir[nd%97]

    str(97-nd%97).zfill(2) est 65 % plus longue que "%02i"%(97-nd%97)

    Une astuce avec 197 au lieu de 97 tourne aussi vite que "%02i"%(97-nd%97)


    Évidemment si on sort la fonction zfill() de la boucle chronométrée, le temps est moindre: -37 % par rapport au formatage de chaîne et str(197-nd%97)[1:]Cette fonction se retrouve utilisée dans la création d'un dictionnaire.
    Mais ce peut être une méthode intéressante si le code est celui d'un programme de gestion de dossiers qui doit tourner sur de gandes quantités de dossiers et donc de numéros.

    D'ailleurs, tant qu'à créer un dictionnaire, autant le créer pour qu'il donne directement la chaîne résultat à partir du reste modulo nd%97.
    On diminue cette fois le temps d'exécution de 55 % au lieu de 37 %.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DF] Problème merise securité sociale
    Par nico76000 dans le forum Schéma
    Réponses: 1
    Dernier message: 30/05/2008, 00h56
  2. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  3. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49
  4. cle pour programme
    Par mumu2001 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 04/11/2002, 10h34

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