Passage par valeur et par référence des paramètre

Résolu
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 - Modifié par Whismeril le 11/05/2014 à 08:05
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 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()

3 réponses

YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
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 deuxième erreur :

bouton = Button(fenetre, text="corriger", command=corriger(mot))

--> 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.
1
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
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
0
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
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/
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
11 mai 2014 à 08:05
Balises de codes ajoutés, voir ici comment utiliser la coloration syntaxique.
0
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
12 mai 2014 à 09:48
merci bien monsieur pour l'information
0
Rejoignez-nous