Adaptateur Tension : Donne les Résistances d'un Pont

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
MSG
Raspinaute
Messages : 119
Enregistré le : ven. 26 déc. 2014 18:31

Re: Adaptateur Tension : Donne les Résistances d'un Pont

Message par MSG » mer. 11 mars 2020 14:38

Bonjour ,

voilà j'ai pondu un bout de code qui fonctionne mais doit probablement avoir besoin de quelques ajustements .

On peut passer les code couleurs en ligne de texte d'un bloc ou élément par élément (d'où le *c_tuple avec un nombre indfini d'arguments passés à la fonction) .

J'avais un bug et j'ai du réécrire une partie du code car je n'arrivais pas localiser où se situait l'erreur (code 4 couleur volontairement erronée et c'est le test 5 couleurs qui m'interceptait l'erreur ? j'ai dû faire une boulette avec les indentations !!! )

Code : Tout sélectionner

#!/usr/bin/python3

#
# Resistance code couleurs - MSG - (c) 03/2020
#

def Valeur (couleur, *c_tuple) :
    code = (\
        ('noir',     1e0, 20e-2, 200 ),\
        ('marron',   1e1,  1e-2, 100 ),\
        ('rouge',    1e2,  2e-2,  50 ),\
        ('orange',   1e3,   '?',  15 ),\
        ('jaune',    1e4,   '?',  25 ),\
        ('vert',     1e5, 50e-4, '?' ),\
        ('bleu',     1e6, 25e-4,  10 ),\
        ('violet',   1e7, 10e-4,   5 ),\
        ('gris',     '?',  5e-4, '?' ),\
        ('blanc',    '?',   '?',   1 ),\
        ('argent',  1e-2, 10e-2, '?' ),\
        ('or',      1e-1,  5e-2, '?' ))

    lc=''
    if couleur.count(',') : couleur = couleur.replace(',',' ')
    lc = couleur.split()
    if c_tuple : lc += list(c_tuple)
    
    if len(lc) > 6 : return '?\nTrop de vouleurs (6 maxi)'
    if len(lc) < 4 : return '?\npas assez de couleurs (4 mini)'

    
    cc = list()
    for n in range( len(lc) ) :
        lc[n] = lc[n].lower()
        for t in range( len(code) ) :
            if lc[n] == code[t][0] :
                cc += [t*(t<=9)+(t-12)*(t>9)]
                break
            if t == 11 : cc += '?' 
            
    if cc.count('?') :
        aff = 'Erreur couleur\n'
        for n in range( len(cc) ) :
            aff += ('%6s , %2s\n' % (lc[n], cc[n] ))
        return aff


    aff = '\n'
    R = cc[0] * 1e1 + cc[1]
    if R == 0 : return 'R <= 0 ; inconnue'

    if len(cc) == 4 :
        if (10 <= R < 100) and cc[2] < 8 :
            R *= code[cc[2]][1]
            if code[cc[3]][2] is not('?') :
                pcent = str(code[cc[3]][2] * 100) + ' %'
            else :
                pcent = "? %"
            aff += ('%6s - %2s\n' %(lc[0], cc[0] ))
            aff += ('%6s - %2s\n' %(lc[1], cc[1] ))
            aff += ('%6s - x pow (10,%s)\n' %(lc[2], cc[2] ))
            aff += ('%6s - %s \n' %(lc[3], pcent ))
        else :
            aff = ('Erreur code 4 couleur \n' + (\
            (cc[0] < 1) * ('couleur 1 - %s - non autorisé\n' % lc[0]) +\
            (cc[1] < 0) * ('couleur 2 - %s - non autorisé\n' % lc[1]) +\
            (cc[2] > 7) * ('couleur 3 - %s - non autorisé\n' % lc[2]) ))
            return aff
    
    if len(cc) >= 5 :
        if (1 <= R < 1000) and cc[3] < 8 :
            R = R * 10 + cc[2]
            R *= code[cc[3]][1]
            if code[cc[4]][2] is not('?') :
                pcent = str(code[cc[4]][2] * 100) + ' %'
            else :
                pcent = "? %'"
            aff += ('%6s - %2s\n' %(lc[0], cc[0] ))
            aff += ('%6s - %2s\n' %(lc[1], cc[1] ))
            aff += ('%6s - %2s\n' %(lc[2], cc[2] ))
            aff += ('%6s - x pow (10,%s)\n' %(lc[3], cc[3] ))
            aff += ('%6s - %s\n' %(lc[4], pcent ))
        else :
            aff = ('Erreur code 5 couleur \n' + (\
            (cc[0] < 0) * ('couleur 1 - %s - non autorisé\n' % lc[0]) +\
            (cc[1] < 1) * ('couleur 2 - %s - non autorisé\n' % lc[1]) +\
            (cc[2] < 0) * ('couleur 3 - %s - non autorisé\n' % lc[1]) +\
            (cc[3] > 7) * ('couleur 4 - %s - non autorisé\n' % lc[2]) ))
            return aff
        
    ppmc = ''
    if len(cc) == 6 :
            if code[cc[5]][3] != ('?') :
                ppmc = str(code[cc[5]][3]) + ' PPM/°c'
            else :
                ppmc = "? PPM/°c"
            aff += ('%6s - %s' % (lc[5], ppmc ))

    Ru = str( \
        R//1e9  and str( R/1e9) [:5].rjust( 5, " " )   + " GΩ" or\
        R//1e6  and str( R/1e6) [:5].rjust( 5, " " )   + " MΩ" or\
        R//1e3  and str( R/1e3) [:5].rjust( 5, " " )   + " KΩ" or\
        R//1e0  and str( R/1e0) [:5].ljust( 5, "0" )   + " Ω"  or\
        R//1e-3 and str( R*1e3) [:5].ljust( 5, "0" )   + " mΩ")

    if __name__ == '__main__' :
        aff = str([R] + [Ru] + [pcent] + ((len(cc) == 6) * [ppmc] )) + aff
        return aff 
    else :
        aff = ([R] + [Ru] + [pcent] + ((len(cc) == 6) * [ppmc] ))
        return aff

#
# Main
#

if __name__ == '__main__' :
    encore = True
    while encore :
        c = input('\nCouleurs de résistance ? (n = exit)\n')
        if c == 'n' : break
        R = Valeur (c)
        print('Resistance id : %s' % R )

Répondre

Retourner vers « Python »