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 )