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
| def poids(car):
#retourne une estimation du poids du caractere
#les caracteres accentues comptent comme des lettres normales
poids = ord(car)
if poids in [131, 132, 133, 134, 160]:
poids = ord('a')
elif poids in [130, 136, 137, 138]:
poids = ord('e')
elif poids in [139, 140, 141, 161]:
poids = ord('i')
elif poids in [147, 148, 149, 162]:
poids = ord('o')
elif poids in [129, 150, 151, 163]:
poids = ord('u')
return poids
def compare(nom1, nom2):
#retourne Vrai si nom2 doit etre place avant nom1
if len(nom1) > len(nom2):
max = len(nom2)
else:
max = len(nom1)
poids1 = poids2 = 0
for i in range(max):
poids1 += poids(nom1[i])
poids2 += poids(nom2[i])
return poids2 < poids1
def trier(noms):
#trie les noms de facon naturelle (retourne une nouvelle liste)
liste = noms[:]
nbNoms = len(liste)
fini = False
while not fini:
fini = True
for i in range(1, nbNoms):
if compare(liste[i-1], liste[i]):
liste[i], liste[i-1] = liste[i-1], liste[i]
fini = False
return liste |
Partager