Problème avec Tkinter ,fonctions
leblogueur
-
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je débute un peu en python et j'ai créé un jeu de mathématique et j'aimerais l'adapter graphiquement
le code du jeu non graphique:
et donc je n'arrive pas à faire une interface graphique fonctionnelle
le code de ce que j'ai "commencé" pour le jeu avec une interface graphique:
et voici le message d'erreur quand je clique sur valider:
si vous savez comment l'améliorer et puis désolé si mon erreur est bête je suis tète en l'air
et désolé si tout est faut mais bon...
je débute un peu en python et j'ai créé un jeu de mathématique et j'aimerais l'adapter graphiquement
le code du jeu non graphique:
operation = "l" dificulter = 5 score = 0 vie = 3 bonus = 0 reponse = None print("Bonjour ! Voici un petit jeu de calcul mental. A toi de jouer !") print() while vie>0: import random print("Réalise ce petit calcul :") print() choice_operation = random.randint(1, 5) if choice_operation == 1 or choice_operation == 2 : operation = "+" if choice_operation == 3 or choice_operation == 4 : operation = "-" if choice_operation == 5 : operation = "*" if operation == "*" or operation == "+" or operation == "-": A = random.randint(0, dificulter) B = random.randint(0, dificulter) print (A, operation, B) reponse = int(input()) if operation == "+" : bonne_reponse = A + B if operation == "-" : bonne_reponse = A - B if operation == "*" : bonne_reponse = A * B if reponse == bonne_reponse : print ("Bravo !") dificulter += 1 score += 10 bonus += 1 print ("Tu as", score, "points") if bonus == 10 : print("Bravo ! Tu as réussi à faire", bonus, "calculs sans te tromper !") choix_bonus = int(input("Souhaites-tu gagner une vie supplémentaire ou échanger cette vie contre des points ? (1) ou (2) :")) if choix_bonus == 1: bonus = 0 vie += 1 print("Bravo ! Tu as maintenant", vie, "vies") elif choix_bonus == 2: bonus = 0 score += 20 print("Bravo ! Tu as maintenant", score, "points") if score == 199: choix_challenge = int(input("Nouvelle étape ! Souhaites-tu rentrer dans le mode challenge ? (1)oui ou (2) non :")) if choix_challenge == 1: print("Mode challenge activé ! Tu n'as plus qu'une vie...") vie = 1 dificulter += 10 if bonus == 15: vie += 1 bonus = 0 print("Tu as maintenant", vie, "vies") elif choix_challenge == 2: print("Tu peux continuer de jouer normalement") else: print("Tu peux continuer de jouer normalement") elif reponse != bonne_reponse: vie -= 1 bonus = 0 print ("Il te reste", vie, "vies et la bonne réponse était", bonne_reponse ) if vie == 0 : print ("Tu as perdu...") print ("Tu as", score, "points") score = 0 bonus = 0 dificulter = 5 reponse = input ("""si tu veut rejouer tape "oui" : """) if reponse == "oui": vie = 3
et donc je n'arrive pas à faire une interface graphique fonctionnelle
le code de ce que j'ai "commencé" pour le jeu avec une interface graphique:
from tkinter import * import random operation = "l" dificulter = 5 score = 0 vie = 3 bonus = 0 def calcul_generator(): choice_operation = random.randint(1, 5) if choice_operation == 1 or choice_operation == 2 : operation = "+" if choice_operation == 3 or choice_operation == 4 : operation = "-" if choice_operation == 5 : operation = "*" if operation == "*" or operation == "+" or operation == "-": A = random.randint(0, dificulter) B = random.randint(0, dificulter) calcul = A, operation, B calcul_text.config(text=calcul, font=("Helvetica", 20), bg="#E9EA81", fg="#223E44") else: print("mince") def calcul_verif(): calcul_generator() global vie global bonne_reponse if operation == "+" : bonne_reponse = A + B if operation == "-" : bonne_reponse = A - B if operation == "*" : bonne_reponse = A * B if calcul_entry == bonne_reponse : label_title.config(text="bravo", font=("Helvetica", 20), bg="#E9EA81", fg="#223E44") elif calcul_entry != bonne_reponse: vie -= 1 msg_tromper = ("dommage la réponse était", bonne_reponse, "et tu as", vie, "vies") label_title.config(text=msg_tromper, font=("Helvetica", 20), bg="#E9EA81", fg="#223E44") window = Tk() window.title("jeu math") window.geometry("720x480") window.minsize(620, 400) window.config(background='#4065A4') frame =Frame(window, bg='#4065A4') width = 300 height = 300 image = PhotoImage(file="img_math.png").zoom(11).subsample(20) canvas = Canvas(frame, width=width, height=height, bg='#4065A4', bd=0, highlightthickness=0) canvas.create_image(width/2, height/2, image=image) canvas.grid(row=0, column=0, sticky=W) right_frame = Frame(frame, bg='#4065A4') label_title = Label(right_frame, text="", font=("Helvetica", 20), bg='#4065A4', fg='white') label_title.pack() calcul_text = Label(right_frame, text="0 + 0", font=("Helvetica", 20), bg="#E9EA81", fg="#223E44") calcul_text.pack() calcul_entry = Entry(right_frame, text="", font=("Helvetica", 20), bg='#4065A4', fg='white') calcul_entry.pack() generate_calcul = Button(right_frame, text="valider", font=("Helvetica", 20), bg="#4065A4", fg="#223E44", command=calcul_verif) generate_calcul.pack() right_frame.grid(row=0, column=2, sticky=W) frame.pack(expand=YES) window.mainloop()
et voici le message d'erreur quand je clique sur valider:
if calcul_entry == bonne_reponse : NameError: name 'bonne_reponse' is not defined
si vous savez comment l'améliorer et puis désolé si mon erreur est bête je suis tète en l'air
et désolé si tout est faut mais bon...
Configuration: Windows / Chrome 86.0.4240.75
A voir également:
- Problème avec Tkinter ,fonctions
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Fonction si avec ou - Guide
- Mise en forme conditionnelle avec fonction si - Guide
- Fonctions excel en anglais - Guide
- Fonctions excel - Guide
3 réponses
Bonjour leblogueur,
Normal : operation est locale a la fonction calcul_generator donc inconnue dans calcul_verif
idem pour A et B
problème ici:
du coup, quand on répond bien, on a un message "dommage la réponse était ..."
Pour récupérer le contenu de la réponse dans calcul_entry, il ne suffit pas d'écrire
mais
Au fait, il faut écrire difficulte et pas dificulter
Sinon, tu peux simplifier le choix de l'opération comme ceci:
Normal : operation est locale a la fonction calcul_generator donc inconnue dans calcul_verif
idem pour A et B
problème ici:
calcul = A, operation, B
du coup, quand on répond bien, on a un message "dommage la réponse était ..."
Pour récupérer le contenu de la réponse dans calcul_entry, il ne suffit pas d'écrire
if calcul_entry == bonne_reponse :
mais
if calcul_entry.get() == bonne_reponse :
Au fait, il faut écrire difficulte et pas dificulter
Sinon, tu peux simplifier le choix de l'opération comme ceci:
op = ['+', '-', '*'] operation = random.choice(op)
il y a aussi un problème de logique:
tu initialise calcul_text avec : "0+0"
donc on répond 0 et on valide
et le bouton valider déclenche l'initialisation du calcul a afficher, mais trop tard, on a répondu 0, donc erreur
tu initialise calcul_text avec : "0+0"
donc on répond 0 et on valide
et le bouton valider déclenche l'initialisation du calcul a afficher, mais trop tard, on a répondu 0, donc erreur
en gros, il faudrait faire ça:
from tkinter import * import random difficulte = 5 score = 0 vie = 3 bonus = 0 def calcul_generateur(): global bonne_reponse #On efface les boites calcul_entry.delete(0,END) label_msg.config(text='') op = ['+', '-', '*'] operation = random.choice(op) A = random.randint(0, difficulte) B = random.randint(0, difficulte) calcul = str(A)+operation+str(B) bonne_reponse = eval(calcul) #Affichage du calcul calcul_text.config(text=calcul) def calcul_verif(): global vie, bonne_reponse if(int(calcul_entry.get()) == bonne_reponse): label_msg.config(text="Bravo !") else: vie -= 1 msg_erreur = "Erreur : {} Vie : {}".format(str(bonne_reponse), vie) label_msg.config(text=msg_erreur) window = Tk() window.title("Jeu mathématique") window.geometry("400x200") window.minsize(300, 200) window.config(background='#4065A4') label_msg = Label(window, width = '20', font=("Helvetica", 15)) label_msg.place(x=100, y=10) calcul_text = Label(window, width = '20', font=("Helvetica", 15)) calcul_text.place(x=100, y=50) calcul_entry = Entry(window, font=("Helvetica", 15)) calcul_entry.place(x=100, y=100) calcul_entry.focus() generate_calcul = Button(window, text="Afficher un calcul", font=("Helvetica", 11), command=calcul_generateur) generate_calcul.place(x=100, y=150) verif_calcul = Button(window, text="Valider", font=("Helvetica", 11), command=calcul_verif) verif_calcul.place(x=250, y=150) window.mainloop()