TP2 Changé lignage

This commit is contained in:
Geoffrey Frogeye 2015-02-09 19:49:10 +01:00
parent 38f5b68db6
commit 9f0f11f28f

View file

@ -21,10 +21,10 @@ def question(numero):
partie('Quelques méthodes sur les listes et les chaînes') # Geoffrey partie('Quelques méthodes sur les listes et les chaînes') # Geoffrey
section('Méthode split') section('Méthode split')
question(1) question(1)
print(">>> s = 'la méthode split est parfois bien utile'") print(">>> s = 'la méthode split est parfois bien utile'")
s = 'la méthode split est parfois bien utile' s = 'la méthode split est parfois bien utile'
print(">>> s.split (' ')") print(">>> s.split (' ')")
@ -41,12 +41,10 @@ print(">>> s.split ('split')")
print(s.split('split')) print(s.split('split'))
question(2) question(2)
print( print(
'La méthode `split` renvoie la liste des chaînes de la découpe de la chaîne sur laquelle est appliquée la fonction par la chaîne passée en argument (ou à défaut le caractères d\'espacement') 'La méthode `split` renvoie la liste des chaînes de la découpe de la chaîne sur laquelle est appliquée la fonction par la chaîne passée en argument (ou à défaut le caractères d\'espacement')
question(3) question(3)
print(">>> s = 'la méthode split est parfois bien utile'") print(">>> s = 'la méthode split est parfois bien utile'")
s = 'la méthode split est parfois bien utile' s = 'la méthode split est parfois bien utile'
print(">>> s.split(' ')") print(">>> s.split(' ')")
@ -61,7 +59,6 @@ print(
section('Méthode join') section('Méthode join')
question(1) question(1)
print(">>> s = 'la méthode split est parfois bien utile'") print(">>> s = 'la méthode split est parfois bien utile'")
s = 'la méthode split est parfois bien utile' s = 'la méthode split est parfois bien utile'
print('>>> l = s.split()') print('>>> l = s.split()')
@ -88,12 +85,10 @@ print('>>> "".join ([1,2])')
print('TypeError: sequence item 0: expected str instance, int found') print('TypeError: sequence item 0: expected str instance, int found')
question(2) question(2)
print( print(
'La méthode join concatène les chaînes de caractères contenues dans la liste passée en paramètre, en insérant entre deux la chaîne de caractère sur laquelle elle est appliquée.') 'La méthode join concatène les chaînes de caractères contenues dans la liste passée en paramètre, en insérant entre deux la chaîne de caractère sur laquelle elle est appliquée.')
question(3) question(3)
print('>>> chaine = \'!\'') print('>>> chaine = \'!\'')
chaine = '!' chaine = '!'
print('>>> chaine.join(l)') print('>>> chaine.join(l)')
@ -106,8 +101,6 @@ print(
'De par cet exemple, on remarque que chaine reste la même chaîne de caractères, `join` ne modifie donc pas la chaîne de caractères à laquelle elle s\'applique (ce qui est logique vu le caractère non-mutable des chaînes de caractères') 'De par cet exemple, on remarque que chaine reste la même chaîne de caractères, `join` ne modifie donc pas la chaîne de caractères à laquelle elle s\'applique (ce qui est logique vu le caractère non-mutable des chaînes de caractères')
question(4) question(4)
def join(chaine, sequence): def join(chaine, sequence):
""" """
Retourne la concaténation des éléments de séquence en insérant chaine entre eux. Retourne la concaténation des éléments de séquence en insérant chaine entre eux.
@ -124,10 +117,10 @@ def join(chaine, sequence):
print(">>> join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])") print(">>> join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])")
print(join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])) print(join('.', ['raymond', 'calbuth', 'ronchin', 'fr']))
section('Méthode sort') section('Méthode sort')
question(1) question(1)
print('>>> l = list (\'timoleon\')') print('>>> l = list (\'timoleon\')')
l = list('timoleon') l = list('timoleon')
print('>>> l.sort()') print('>>> l.sort()')
@ -153,7 +146,6 @@ print(
'Il semblerait que la méthode sort trie les caractères de s selon l\'ordre croissant de leur numéro de code ASCII (ou tout encodage utilisé)') 'Il semblerait que la méthode sort trie les caractères de s selon l\'ordre croissant de leur numéro de code ASCII (ou tout encodage utilisé)')
question(2) question(2)
print('>>> l = [\'a\', 1]') print('>>> l = [\'a\', 1]')
print('>>> l.sort()') print('>>> l.sort()')
print('TypeError: unorderable types: int() < str()') print('TypeError: unorderable types: int() < str()')
@ -167,8 +159,6 @@ print(
section('Une fonction sort pour les chaînes') section('Une fonction sort pour les chaînes')
question(1) question(1)
def sort(chaine): def sort(chaine):
""" """
Trie les caractères de chaine par ordre de codage. Trie les caractères de chaine par ordre de codage.
@ -186,8 +176,6 @@ print(sort('timoleon'))
partie('Anagrammes') # Jean-loup partie('Anagrammes') # Jean-loup
question(1) question(1)
def sont_anagrammes1(chaine1, chaine2): def sont_anagrammes1(chaine1, chaine2):
""" """
Indique si chaine1 et chaine2 sont anagrammes Indique si chaine1 et chaine2 sont anagrammes
@ -208,8 +196,6 @@ def sont_anagrammes1(chaine1, chaine2):
return c1 == c2 return c1 == c2
question(2) question(2)
def sont_anagrammes2(chaine1, chaine2): def sont_anagrammes2(chaine1, chaine2):
""" """
Indique si chaine1 et chaine2 sont anagrammes Indique si chaine1 et chaine2 sont anagrammes
@ -230,8 +216,6 @@ def sont_anagrammes2(chaine1, chaine2):
return occu1 == occu2 return occu1 == occu2
question(3) question(3)
def sont_anagrammes3(chaine1, chaine2): def sont_anagrammes3(chaine1, chaine2):
""" """
Indique si chaine1 et chaine2 sont anagrammes Indique si chaine1 et chaine2 sont anagrammes
@ -256,13 +240,10 @@ def sont_anagrammes3(chaine1, chaine2):
section('Casse et accentuation') section('Casse et accentuation')
question(1) question(1)
EQUIV_NON_ACCENTUE = {'é': 'e', 'è': 'e', 'à': 'a', 'ç': 'c', 'î': 'i', 'ï': EQUIV_NON_ACCENTUE = {'é': 'e', 'è': 'e', 'à': 'a', 'ç': 'c', 'î': 'i', 'ï':
'i', 'ô': 'o', 'ê': 'e', 'ë': 'e', 'â': 'a', 'û': 'u', 'ü': 'u', 'ù': 'u'} 'i', 'ô': 'o', 'ê': 'e', 'ë': 'e', 'â': 'a', 'û': 'u', 'ü': 'u', 'ù': 'u'}
question(2) question(2)
def bas_casse_sans_accent(chaine): def bas_casse_sans_accent(chaine):
""" """
Renvoie l'équivalent minuscule non accentuée de la chaîne passée en paramètre Renvoie l'équivalent minuscule non accentuée de la chaîne passée en paramètre
@ -284,8 +265,6 @@ def bas_casse_sans_accent(chaine):
return ret return ret
question(3) question(3)
def sont_anagrammes_sans_casse_ni_accent(chaine1, chaine2): def sont_anagrammes_sans_casse_ni_accent(chaine1, chaine2):
""" """
Indique si chaine1 et chaine2 sont anagrammes sans de tenir compte de la casse ni des accents Indique si chaine1 et chaine2 sont anagrammes sans de tenir compte de la casse ni des accents
@ -315,25 +294,21 @@ section('Le lexique')
# TODO Question 1 ? # TODO Question 1 ?
question(2) question(2)
from lexique import * from lexique import *
question(3) question(3)
print('Il y a %d mots dans le lexique' % len(LEXIQUE)) print('Il y a %d mots dans le lexique' % len(LEXIQUE))
question(4) question(4)
test = len(LEXIQUE) == len(set(LEXIQUE)) test = len(LEXIQUE) == len(set(LEXIQUE))
# Bien que l'on ai vu en cours que cette méthode n'est pas la plus économique en mémoire, c'est # Bien que l'on ai vu en cours que cette méthode n'est pas la plus économique en mémoire, c'est
# bizarrement la plus rapide # bizarrement la plus rapide
print('Le test a retourné %s.' % test) print('Le test a retourné %s.' % test)
section('Anagrammes d\'un mot : première méthode') section('Anagrammes d\'un mot : première méthode')
question(1) question(1)
def anagrammes(mot): def anagrammes(mot):
""" """
Recherche les anagrammes de mot Recherche les anagrammes de mot
@ -346,21 +321,18 @@ def anagrammes(mot):
return [i for i in LEXIQUE if sont_anagrammes_sans_casse_ni_accent(i, mot)] return [i for i in LEXIQUE if sont_anagrammes_sans_casse_ni_accent(i, mot)]
question(2) question(2)
for a in ['Orange', 'Calbuth']: for a in ['Orange', 'Calbuth']:
print('Les anagrammes de %s sont %s.' % (a, ', '.join(anagrammes(a)))) print('Les anagrammes de %s sont %s.' % (a, ', '.join(anagrammes(a))))
section('Anagrammes d\'un mot : seconde méthode') section('Anagrammes d\'un mot : seconde méthode')
question(1) question(1)
print('Il se peut que certains mots du lexique soient des anagrammes d\'autres mots du lexique,\ print('Il se peut que certains mots du lexique soient des anagrammes d\'autres mots du lexique,\
or on se retrouverait alors avec plusieurs fois la même liste d\'anagrammes \ or on se retrouverait alors avec plusieurs fois la même liste d\'anagrammes \
pour des clés différentes.') pour des clés différentes.')
question(2) question(2)
def cle(mot): def cle(mot):
""" """
Renvoie la version triée des lettres en minuscule et sans accents de mot Renvoie la version triée des lettres en minuscule et sans accents de mot
@ -374,9 +346,7 @@ def cle(mot):
return sort(cpy) return sort(cpy)
question(3) question(3)
ANAGRAMMES = dict() ANAGRAMMES = dict()
for m in LEXIQUE: for m in LEXIQUE:
@ -390,8 +360,6 @@ for m in LEXIQUE:
print('Le dictionnaire des anagrammes contient %d entrées' % len(ANAGRAMMES)) print('Le dictionnaire des anagrammes contient %d entrées' % len(ANAGRAMMES))
question(4) question(4)
def anagrammes2(mot): def anagrammes2(mot):
""" """
Recherche les anagrammes de mot Recherche les anagrammes de mot
@ -408,9 +376,7 @@ def anagrammes2(mot):
else: else:
return [] return []
question(5) question(5)
for a in ['Orange', 'Calbuth']: for a in ['Orange', 'Calbuth']:
print('Les anagrammes de %s sont %s.' % (a, ', '.join(anagrammes2(a)))) print('Les anagrammes de %s sont %s.' % (a, ', '.join(anagrammes2(a))))
@ -418,7 +384,6 @@ for a in ['Orange', 'Calbuth']:
section('Comparaison des deux méthodes') section('Comparaison des deux méthodes')
question(1) question(1)
NB_TESTS = 30 # Mettre à 0 pour réduire l'attente NB_TESTS = 30 # Mettre à 0 pour réduire l'attente
import time import time
@ -444,7 +409,6 @@ pris un certain temps, mais reste négligeable par rapport à la première méth
partie('Phrases d\'anagrammes') # Geoffrey partie('Phrases d\'anagrammes') # Geoffrey
question(1) question(1)
# TODO Texte explicatif du concept d'arbres # TODO Texte explicatif du concept d'arbres
@ -497,13 +461,12 @@ def annagrammes_phrase(phrase):
print('>>> annagrammes_phrase(\'Mange ton orange\')') print('>>> annagrammes_phrase(\'Mange ton orange\')')
print(annagrammes_phrase('Mange ton orange')) print(annagrammes_phrase('Mange ton orange'))
partie('Sauvegarde et récupération') partie('Sauvegarde et récupération')
ANAGRAMMES_FICHIER = 'anagrammes.txt' ANAGRAMMES_FICHIER = 'anagrammes.txt'
question(1) question(1)
def sauver_dico(): def sauver_dico():
""" """
Sauvegarde le dictionnaire des anagrammes dans un fichier. Sauvegarde le dictionnaire des anagrammes dans un fichier.
@ -521,10 +484,7 @@ taille = getsize(ANAGRAMMES_FICHIER)
print('Le dictionnaire fait %d octets, soit %0.3f Mio.' % print('Le dictionnaire fait %d octets, soit %0.3f Mio.' %
(taille, taille / 1024 / 1024)) (taille, taille / 1024 / 1024))
question(3) question(3)
def charger_dico(): def charger_dico():
""" """
Lit le dictionnaire des anagrammes depuis un fichier. Lit le dictionnaire des anagrammes depuis un fichier.