nournina
Messages postés52Date d'inscriptiondimanche 27 octobre 2013StatutMembreDernière intervention17 juin 2014
-
Modifié par Whismeril le 11/05/2014 à 08:05
YepoMax
Messages postés74Date d'inscriptionsamedi 8 décembre 2012StatutMembreDernière intervention14 juin 2014
-
14 mai 2014 à 00:31
bonjour,
je fait un script qui fait lire une chaine de caractère ensuite cherche dans un fichier texte s'elle existe. s'elle existe il affiche "mot juste" sinon il fait des permutation des lettre et remplace des lettres par des autre et àchaque foit vérifié s'elle existe dans le fichier texte ou non j'utilise une simple interface avec Tkinter qu'il contienne un label un textBox et une bouton,
quand j'exécute mon programme il me donne l'erreur suivante :
if var in lines :
TypeError: local variable 'var' referenced before assignment
voici mon programme si vous pouvez m'aider à corriger s'il vous plais,(j'utilise python 2.7 sous linux)
merci
#!/usr/bin/python
# -*- coding:Utf-8 -*-
# -*- coding:cp1256 -*-
import os
import string
import sys
from Tkinter import *
#---------------------------------------- fct corriger ----------------------
def corriger(var):
f = open ('dictionnaire.txt', "r")
m = open( "corpus.lm","r")
ff=f.readlines()
for lines in ff :
if var in lines :
if(lines.find(var)!=-1) :
print lines
resultat = Label(fenetre, text="mot juste : ")
resultat.pack
else :
for i, char in var:
if char == 'a':
var = var[:i] + 'b' + var[i+1:]
resultat = Label(fenetre, text="var")
resultat.pack()
elif var == 'b':
var = var[:i] + 'c' + var[i+1:]
resultat = Label(fenetre, text="var")
resultat.pack()
if mot[i] == 'b':
mot = mot[:i] + 'c' + mot[i+1:]
resultat = Label(fenetre, text="mot")
resultat.pack()
elif mot[i] == 'c':
mot = mot[:i] + 'd' + mot[i+1:]
resultat = Label(fenetre, text="mot")
resultat.pack()
return true
#---------------------------------------------------- prg principale -----------------------------------------
fenetre = Tk()
fenetre.geometry("300x300")
fenetre.title("correction ")
label1 = Label(fenetre, text="entrer le mot : ")
label1.pack()
mot = Entry(fenetre)
mot.pack()
bouton = Button(fenetre, text="corriger", command=corriger(mot))
bouton.pack()
fenetre.mainloop()
YepoMax
Messages postés74Date d'inscriptionsamedi 8 décembre 2012StatutMembreDernière intervention14 juin 201420 11 mai 2014 à 00:17
Bonsoir,
Il est for difficile de corriger un code copier/coller en dehors de balises < code> </ code>.
Néanmoins, vos erreurs sont :
- Compréhension du widget Entry
- Compréhension générale des fonctions
Widget Entry :
Votre variable mot est un widget Entry, pour en récupérer le contenu, il faut utiliser la méthode Entry.get
Plus d'infos : http://effbot.org/tkinterbook/entry.htm
--> La fonction "corriger" est appelée lors du lancement du programme, pas lors d'un clic sur le bouton.
Dans un cas général :
Button( command = func( arg ) ) doit être remplacé par Button( command = lambda: func( arg ) ) pour que la fonctions ne sois pas appelée lors du démarrage.
Voilà, en espérant avoir aidé,
YepoMax.
nournina
Messages postés52Date d'inscriptiondimanche 27 octobre 2013StatutMembreDernière intervention17 juin 20141 12 mai 2014 à 09:34
maintenant j'ai compris je vous ai remercie beaucoup c'est résolue
j'ai une autre question du codage:
dans la ligne 22 si je fait le caractère 'é' ou bien 'à'ou bien un des caractère spéciaux il m'affiche des symbole en chinois
merci
YepoMax
Messages postés74Date d'inscriptionsamedi 8 décembre 2012StatutMembreDernière intervention14 juin 201420 14 mai 2014 à 00:31
Il s'agit d'un problème d'encodage, je vous conseille dans ce cas de convertir tous vos caractères spéciaux en UNICODE.
Au lieu de "é", utilisez "\u00e9" et au lieu de "à", utilisez "\u00e0".
"\u" indique que les caractères qui suivent sont une référence UNICODE - "\u00e9" est une chaine de caractère de longueur 1 (comme "é") !!
Pour d'autres codes UNICODE, utilisez "\u" suivi du code correspondant que vous trouverez ici : http://unicode-table.com/
12 mai 2014 à 09:34
j'ai une autre question du codage:
dans la ligne 22 si je fait le caractère 'é' ou bien 'à'ou bien un des caractère spéciaux il m'affiche des symbole en chinois
merci
14 mai 2014 à 00:31
Au lieu de "é", utilisez "\u00e9" et au lieu de "à", utilisez "\u00e0".
"\u" indique que les caractères qui suivent sont une référence UNICODE - "\u00e9" est une chaine de caractère de longueur 1 (comme "é") !!
Pour d'autres codes UNICODE, utilisez "\u" suivi du code correspondant que vous trouverez ici : http://unicode-table.com/