Passage par valeur et par référence des paramètre [Résolu]

nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 4 mai 2014 à 19:55 - Dernière réponse : YepoMax 75 Messages postés samedi 8 décembre 2012Date d'inscription 14 juin 2014 Dernière intervention
- 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()
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
YepoMax 75 Messages postés samedi 8 décembre 2012Date d'inscription 14 juin 2014 Dernière intervention - 11 mai 2014 à 00:17
1
Merci
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.

Merci YepoMax 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 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 75 Messages postés samedi 8 décembre 2012Date d'inscription 14 juin 2014 Dernière intervention - 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/
Commenter la réponse de YepoMax
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 11 mai 2014 à 08:05
0
Merci
Balises de codes ajoutés, voir ici comment utiliser la coloration syntaxique.
Commenter la réponse de Whismeril
nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 12 mai 2014 à 09:48
0
Merci
merci bien monsieur pour l'information
Commenter la réponse de nournina

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.