dunalovitch | Bonjour a tous et désolé de débouler de la sorte, mais j'aurais vraiment besoin de l'avis de personnes calées en python. Je suis étudiant dans une filière qui n'a pas grand chose a voir avec la programmation mais on a quand même des cours de python de niveau très basique. (bref...)
J’étais l'année dernière habitué à un 19,75/20 de moyenne dans cette matière. Cette année, je n'ai pas eu plus de difficultés et je me suis retrouvé avec un 12/20. Je viens de voir ma note et je ne la comprend pas du tout. C'est pourquoi j'aimerais que quelqu'un me donne son avis sur le sujet et me dise ce qui pourrait justifier cette note (la présentation, la méthode...). D'autant plus que j'ai même fait entièrement le sujet d'un pote qui n'y comprend absolument rien, et il a eu 13... Au premier semestre, on avait un autre prof qui a mit 13 a toute la classe. En gros, je cherche a savoir si j'ai potentiellement 6 ou 7 points a gratter en allant gueuler un bon gros coup a la fac Que les choses soient claires, rassurez-vous, je ne vous demande pas d'y passer des plombes, mais juste regarder grosso modo si il y a un truc qui vous choque et ou vous pourriez enlever des points. Le code marche très bien sous Python 3.4.2, aucun bug, rien. Le (petit) sujet :
Spoiler :
Pour la correction orthographique, on utilise une notion de distance un peu différente de la notion précédente appelée distance d'édition. Pour rendre compte des divers types de fautes possibles, on considère comme distance le nombre de modifications (remplacer une lettre par une lettre, supprimer une lettre, ajouter une lettre, échanger deux lettres) nécessaires pour passer d'un mot à un autre. Par exemple, la distance entre fote et faute est de 2, celle entre fuate et faute est de 1.
a) Écrivez des fonctions Remplace1(mot), Supprime1(mot), Ajoute1(mot) et Echange1(mot) qui retournent l'ensemble des mots obtenus à partir du mot mot en effectuant une seule modification.
b) Écrivez une fonction Edit1(mot,dico) qui retourne la liste de tous les mots du dictionnaire dico à distance d'édition 1 du mot mot.
c) Écrivez une fonction Edit2(mot,dico) qui retourne la liste de tous les mots du dictionnaire dico à distance d'édition 2 du mot mot.
d) Créer un dictionnaire contenant des mots et leur fréquence d'apparition dans la langue française f) Écrivez une fonction Corriger(mot, dico) qui énumère la liste de tous les mots du dictionnaire dico à distance d'édition 1 ou 2 du mot mot, propose à l'utilisateur de choisir l'orthographe correcte et renvoie le mot choisi.
|
Mes réponses :
Spoiler :
# QUESTION A)
#Definition de dico et de mot
print("CORRECTION ORTHOGRAPHIQUE D'UN MOT ERRONE" )
print("" )
print("CONTENU DU DICTIONNAIRE" )
print("" )
dico=["bonjour", "chaussette", "licorne", "ananas", "hipopotame", "gateau", "bonbon",
"sandwich", "le", "la", "les", "cochon", "poulet", "foret", "pyramide", "bonsoir",
"merci", "aimer", "manger", "boire", "avec", "contre", "pour", "mais", "voiture",
"test", "banane", "pomme", "appelle", "maxence", "python", "dictionnaire", "schtroumpf",
"babar", "compote", "faire", "chien", "chat", "ane", "gentil", "main", "pied", "france",
"chanson", "chanter", "didgeridoo", "champignon", "fusee", "guitare", "ville", "pays",
"cheminée", "crabe", "plage", "bateau", "cocotier", "coco", "mouette", "miette", "elle",
"lui", "moi", "toi", "toit", "noir", "jaune", "rose", "vert", "violet", "orange", "gris",
"poulette", "tete", "jambes", "bras", "rats", "manier", "europe"]
print(dico)
print("" )
mot=input("Rentrez un mot: " )
print("" )
### DEFINITION DE ECHANGE(MOT)
def echange01(mot, p1, p2):
copie=""
x=0
l=len(mot)
while x < l:
if x == p1:
copie=copie+mot[p2]
elif x == p2:
copie=copie+mot[p1]
else:
copie=copie+mot[x]
x=x+1
return copie
def echange1(mot):
l=len(mot)
liste=[]
p1=0
p2=p1+1
while p2 < l:
combinaison=echange01(mot, p1, p2)
liste.append(combinaison)
p1=p1+1
p2=p1+1
return liste
print("RESULTAT DE LA FONCTION ECHANGE1" )
print("" )
print(echange1(mot))
print("" )
### DEFINITION DE SUPPRIMER1(MOT)
def supprimer1(mot):
l=len(mot)
x=0
pos=0
copie=""
liste=[]
while pos < l:
while x < l:
if x == pos :
copie=copie+""
else :
copie=copie+mot[x]
x=x+1
liste.append(copie)
copie=""
x=0
pos=pos+1
return liste
print("RESULTAT DE LA FONCTION SUPPRIMER1" )
print("" )
print(supprimer1(mot))
print("" )
### DEFINITION DE AJOUTE1(MOT)
def ajouter01(mot, lettre, pos):
copie=""
x=0
l=len(mot)
while x < l :
if x == pos :
copie=copie+lettre+mot[x]
elif pos == l :
copie=mot+lettre
else :
copie=copie+mot[x]
x=x+1
return copie
def ajouter1(mot):
l=len(mot)
alphabet=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
liste=[]
pos=0
y=0
lettre=alphabet[y]
while pos <= l:
while y < 26:
lettre=alphabet[y]
combinaison=ajouter01(mot, lettre, pos)
if combinaison!=mot:
liste.append(combinaison)
y=y+1
pos=pos+1
y=0
return liste
print("RESULTAT DE LA FONCTION AJOUTER1" )
print("" )
print(ajouter1(mot))
print("" )
### DEFINITION DE REMPLACE(MOT)
def remplacer01(mot, lettre, pos):
copie=""
x=0
l=len(mot)
while x < l :
if x == pos :
copie=copie+lettre
else :
copie=copie+mot[x]
x=x+1
return copie
def remplacer1(mot):
l=len(mot)
alphabet=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
liste=[]
pos=0
y=0
lettre=alphabet[y]
while pos <= l:
while y < 26:
lettre=alphabet[y]
combinaison=remplacer01(mot, lettre, pos)
if combinaison!=mot:
liste.append(combinaison)
y=y+1
pos=pos+1
y=0
return liste
print("RESULTAT DE LA FONCTION REMPLACER1" )
print("" )
print(remplacer1(mot))
print("" )
#'''################################# QUESTION B) ############################'''
# definition de edit1
def edit1 (mot, dico):
liste=[]
for x in remplacer1(mot):
if x in dico:
liste.append(x)
for x in supprimer1(mot):
if x in dico:
liste.append(x)
for x in ajouter1(mot):
if x in dico:
liste.append(x)
for x in echange1(mot):
if x in dico:
liste.append(x)
return liste
print("MOTS A DISTANCE D'EDITION 1 DU MOT CHOISI" )
print("" )
print(edit1(mot, dico))
print("" )
#'''################################# QUESTION C) ############################'''
# DEFINITION DE EDIT2
def editbis1 (mot, dico):
liste=[]
for x in remplacer1(mot):
liste.append(x)
for x in supprimer1(mot):
liste.append(x)
for x in ajouter1(mot):
liste.append(x)
for x in echange1(mot):
liste.append(x)
return liste
def edit2 (mot, dico):
liste=[]
l0=editbis1(mot, dico)
l=len(l0)
x=0
#La condition "if y not in edit1(mot, dico)" peut être retirée si l'on veut également inclure les mots a distance 1 du mot "mot"
while x != l :
for y in supprimer1(l0[x]):
if y not in liste:
if y in dico:
if y not in edit1(mot, dico):
liste.append(y)
for y in remplacer1(l0[x]):
if y not in liste:
if y in dico:
if y not in edit1(mot,dico):
liste.append(y)
for y in echange1(l0[x]):
if y not in liste:
if y in dico:
if y not in edit1(mot,dico):
liste.append(y)
for y in ajouter1(l0[x]):
if y not in liste:
if y in dico:
if y not in edit1(mot,dico):
liste.append(y)
x=x+1
if mot in liste:
liste.remove(mot)
return liste
print("" )
print("MOTS A DISTANCE D'EDITION 2 DU MOT CHOISI" )
print("" )
print(edit2(mot,dico))
print("" )
#'''################################# QUESTION D) ############################'''
import os
def creerDico( dicoBrut ):
""" Cree un dictionnaire dont les clés sont les mots et les valeurs le type grammatical """
dico = {}
if os.access(dicoBrut, os.R_OK):
fichier = open(dicoBrut,"r" )
contenu = fichier.readlines()
fichier.close()
else:
print("Le fichier",nomfichier,"n'existe pas" )
for phrase in contenu: if len(phrase.split()) >= 2:
cle = phrase.split()[0]
if cle in dico:
dico[cle] += 1
else:
dico[cle] = 1
return dico
print("" )
print ("RESULTAT DE LA FONCTION CREERDICO AVEC UN DICTIONNAIRE IMPORTE FAIT MAISON" )
print("" )
print(creerDico('dico2.txt'))
print("" )
#'''################################# QUESTION E) ############################'''
# QUESTION ANNULEE
#'''################################# QUESTION F) ############################'''
def Corriger (mot, dico):
reponse=''
liste=edit1(mot,dico)+edit2(mot, dico)
print("Voici les mots a distance 1 du mot " + mot)
print(edit1(mot,dico))
print("Voici les mots a distance 2 du mot " + mot)
print(edit2(mot,dico))
if len(liste)!=0:
while reponse not in liste:
reponse=input("Choisissez la correction adaptée" )
print("Vous avez choisi le mot " + reponse)
if reponse not in liste : print("Attention ! le mot " + reponse + " n'est pas dans la liste ! Choisissez-en un autre." )
else:
print("GAME OVER : Aucune correction trouvée, recommencez une nouvelle partie" )
return reponse
print("" )
print ("CORRECTION DU MOT ERRONE" )
print("" )
Corriger (mot,dico)
#ordonner la liste en fonction des frequences d'apparition : question annulée
|
PS : Je n'ai rien fait de méchant au prof. Voila vous seriez bien sympa de me renseigner ![:) :)](https://forum-images.hardware.fr/icones/smile.gif) |