Répéter ma fonction un certain nombre de fois
Utilisateur anonyme
-
potyrond -
potyrond -
Bonjour,
J'ai un projet à faire en isn ou je dois proposer une série de 10 calculs.
J'ai réussi à programmer ma fonction mais je n'arrive pas à ce qu'elle se stop au bout du 10ème cacul.
Pouvez vous m'aider svp?
Voici la partie de mon programme avec ma fonction pour les additions :
J'ai un projet à faire en isn ou je dois proposer une série de 10 calculs.
J'ai réussi à programmer ma fonction mais je n'arrive pas à ce qu'elle se stop au bout du 10ème cacul.
Pouvez vous m'aider svp?
Voici la partie de mon programme avec ma fonction pour les additions :
def addition ():
def question() :
global resultat
signe = ("+")
chiffre1 = randint(0,99)
chiffre2 = randint(0,99)
calcul = (chiffre1, signe, chiffre2, ("="))
resultat = chiffre1 + chiffre2 #résultat de l'addition
resultat = str(resultat) #converti resultat en chaine
affichageoperation = Label(fenetre, text= calcul)
affichageoperation.pack()
global entree
value = StringVar()
value.set("" )
entree = Entry(fenetre, textvariable=value, width=30)
entree.pack()
entree.bind("<Return>", reponse)
def reponse(chiffre):
reponse = str(entree.get())
if reponse == resultat :
print = Label(fenetre, text = "BRAVO", bg = "green" )
print.pack()
else :
print = Label(fenetre, text = "MAUVAIS", bg = "red" )
print.pack()
question()
fenetre = Tk()
fenetre.geometry("400x700")
fenetre.title("ADDITIONS")
text1= Label(fenetre,text="Quelques additions...")
text1.pack()
question ()
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Répéter ma fonction un certain nombre de fois
- Fonction si et - Guide
- Nombre de jours entre deux dates excel - Guide
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
- Téléphone sonne 1 fois puis messagerie - Forum Mobile
- Durée de fonctionnement processeur ✓ - Forum Windows 10
5 réponses
Bonjour.
Où est censé être dans ton code cette série de 10 calculs ?
Tu utilises une interface graphique, donc cela implique de faire agir l'utilisateur.
Les grandes lignes de ton interface devraient-être :
1 - Affichage d'une opération.
2 - Attente de la saisie du résultat par l'utilisateur.
3 - Si nombre d'opérations effectuées est de 10 => afficher un bouton "voir résultats"
.... Sinon, afficher un bouton "suivant' pour l'opération suivante.
Où est censé être dans ton code cette série de 10 calculs ?
Tu utilises une interface graphique, donc cela implique de faire agir l'utilisateur.
Les grandes lignes de ton interface devraient-être :
1 - Affichage d'une opération.
2 - Attente de la saisie du résultat par l'utilisateur.
3 - Si nombre d'opérations effectuées est de 10 => afficher un bouton "voir résultats"
.... Sinon, afficher un bouton "suivant' pour l'opération suivante.
Boujour,
Je n'ai pas réussi à faire apparaître les boutons j'ai donc essayé de mettre un compteur dans ma fonction mais elle ne s'arrête toujours pas.
Pouvez-vous me dire le problème dans mon code svp ?
Je n'ai pas réussi à faire apparaître les boutons j'ai donc essayé de mettre un compteur dans ma fonction mais elle ne s'arrête toujours pas.
Pouvez-vous me dire le problème dans mon code svp ?
def addition ():
def question() :
nb=0
global resultat
signe = ("+")
chiffre1 = randint(0,99)
chiffre2 = randint(0,99)
calcul = (chiffre1, signe, chiffre2, ("="))
resultat = chiffre1 + chiffre2
resultat = str(resultat)
affichageoperation = Label(fenetre, text= calcul)
affichageoperation.pack()
global entree
value = StringVar()
value.set("" )
entree = Entry(fenetre, textvariable=value, width=30)
entree.pack()
if nb<=10:
entree.bind("<Return>", reponse)
nb=nb+1
else :
entree.bind("<Return>", fin)
def fin ():
print = Label(fenetre, text = "FIN", bg = "green" )
def reponse(chiffre):
reponse = str(entree.get())
if reponse == resultat :
print = Label(fenetre, text = "BRAVO", bg = "green" )
print.pack()
else :
print = Label(fenetre, text = "MAUVAIS", bg = "red" )
print.pack()
question()
fenetre = Tk()
fenetre.geometry("400x700")
fenetre.title("ADDITIONS")
text1= Label(fenetre,text="Quelques additions...")
text1.pack()
question ()
Bonjour,
Cela ne s'arrête jamais car à chaque fois que la fonction question() est appelée, nb est remis à 0.
Tu peux par exemple t'en sortir en faisant en sorte que ce ne soit pas question() qui définisse la valeur de nb, mais qu'elle soit une variable globale, comme "resultat".
Xavier
Cela ne s'arrête jamais car à chaque fois que la fonction question() est appelée, nb est remis à 0.
Tu peux par exemple t'en sortir en faisant en sorte que ce ne soit pas question() qui définisse la valeur de nb, mais qu'elle soit une variable globale, comme "resultat".
Xavier
Bonsoir,
j'ai essayé d'insérer une variable globale à ma fonction pour que nb ne reparte pas tout le temps à 0 mais cela ne marche toujours pas. Pourriez vous m'expliquer pourquoi ?
j'ai essayé d'insérer une variable globale à ma fonction pour que nb ne reparte pas tout le temps à 0 mais cela ne marche toujours pas. Pourriez vous m'expliquer pourquoi ?
nb=0
def addition ():
def question() :
global resultat
signe = ("+")
chiffre1 = randint(0,99)
chiffre2 = randint(0,99)
calcul = (chiffre1, signe, chiffre2, ("="))
resultat = chiffre1 + chiffre2
resultat = str(resultat)
affichageoperation = Label(fenetre, text= calcul)
affichageoperation.pack()
global entree
value = StringVar()
value.set("" )
entree = Entry(fenetre, textvariable=value, width=30)
entree.pack()
if nb==0:
entree.bind("<Return>", reponse)
global nb
nb=nb+1
else :
entree.bind("<Return>", fin)
def fin (chiffre):
print = Label(fenetre, text = "FIN", bg = "green" )
def reponse(chiffre):
reponse = str(entree.get())
if reponse == resultat :
print = Label(fenetre, text = "BRAVO", bg = "green" )
print.pack()
else :
print = Label(fenetre, text = "MAUVAIS", bg = "red" )
print.pack()
question()
fenetre = Tk()
fenetre.geometry("400x700")
fenetre.title("ADDITIONS")
text1= Label(fenetre,text="Quelques additions...")
text1.pack()
question ()
Bonjour.
Les global à l'intérieur d'une fonction doivent se situer de préférences en début de fonctions.
Il vaut mieux éviter de déclarer des fonctions à l'intérieur d'autres fonctions, il y a rarement de cas où l'on a besoin de faire cela.
Voici un exemple de comment ton programme devrait être structuré, ce n'est sans doute pas ce que tu souhaites obtenir, mais ça peut te montrer un peu un exemple simple et fonctionnel.
On pourrait grandement améliorer et condenser ce simple programme, mais en l'état, cela te permettra de comprendre comment organiser ton script un peu plus correctement avec de simples fonctions.
Les global à l'intérieur d'une fonction doivent se situer de préférences en début de fonctions.
Il vaut mieux éviter de déclarer des fonctions à l'intérieur d'autres fonctions, il y a rarement de cas où l'on a besoin de faire cela.
Voici un exemple de comment ton programme devrait être structuré, ce n'est sans doute pas ce que tu souhaites obtenir, mais ça peut te montrer un peu un exemple simple et fonctionnel.
import random
import tkinter as tk
def additionner(nombre1, nombre2):
return nombre1 + nombre2
def soustraire(nombre1, nombre2):
return nombre1 - nombre2
def multiplier(nombre1, nombre2):
return nombre1 * nombre2
# Dictionnaire reliant signes et fonctions
operateurs = {
'+':additionner,
'-':soustraire,
'×':multiplier,
}
# Fonction choisissant et retournant un tuple de deux nombres et un opérateur
def choisir_operation():
nombres = (random.randint(0, 99), random.randint(0, 99))
signe = random.choice(list(operateurs))
return nombres, signe
# Fonction calculant le résultat d'une opération
def calculer_operation(nombres, signe):
operateur = operateurs[signe]
return operateur(nombres[0], nombres[1])
# Plus simplement
# return operateurs[signe](*nombres)
# Fonction formatant l'opération en chaîne de caractères
def formater_operation(nombres, signe):
return '{1} {0} {2}'.format(signe, *nombres)
# Fonction affichant une opération à effectuer
def questionner():
# Reset de la valeur de l'entrée à une chaîne vide
entree.delete(0, 'end')
# Récupération d'une nouvelle opération
nombres, signe = choisir_operation()
# Formatage en chaîne de l'opération
operation = formater_operation(nombres, signe)
# Calcul du résultat correct
resultat_correct = calculer_operation(nombres, signe)
# Enregistrement de l'opération, et du résultat correct
resultats.append([operation, resultat_correct])
# Affichage de l'opération à résoudre
label_operation['text'] = 'Combien font %s ?' % operation
# Fonction enregistrant le résultat saisi par l'utilisateur
def valider_resultat(event=None):
# Ajout au dernier élément de résultats, la valeur saisie
resultats[-1].append(entree.get())
# Si nombre de résultats pas encore atteint
if len(resultats) < NOMBRE_QUESTIONS:
# Rappel de la fonction questionner
questionner()
else:
# Le nombre d'opération total a été atteint, affichage des résultats
afficher_resultats()
# Affiche les résultats des opérations enregistrées
def afficher_resultats():
# Destruction du label et de l'entry
label_operation.destroy()
entree.destroy()
frame_resultats = tk.Frame(fenetre)
frame_resultats.grid()
# Titre
label_titre = tk.Label(frame_resultats, text='Résultats')
label_titre.grid(columnspan=3)
# Parcours et affichage de la liste des résultats
for i, resultat in enumerate(resultats, 1):
label_question = tk.Label(frame_resultats, text=resultat[0])
label_question.grid(row=i, column=0, padx=10)
label_reponse = tk.Label(frame_resultats, text=resultat[2], fg='green')
label_reponse.grid(row=i, column=1, padx=10)
# Si résultat incorrect, affichage du bon résultat
if str(resultat[1]) != resultat[2]:
label_reponse['fg'] = 'red'
label_reponse_correcte = tk.Label(frame_resultats, text=resultat[1], fg='yellow')
label_reponse_correcte.grid(row=i, column=2, padx=10)
# Constante déterminant combien d'opérations sont à résoudre
NOMBRE_QUESTIONS = 10
# Liste qui contiendra des listes avec pour valeurs :
# - opération à résoudre
# - résultat correct
# - valeur saisie par l'utilisateur
resultats = []
fenetre = tk.Tk()
fenetre.geometry("300x400")
fenetre.title("OPÉRATIONS")
label_operation = tk.Label(fenetre)
label_operation.pack()
entree = tk.Entry(fenetre)
entree.pack()
entree.focus()
entree.bind("<Return>", valider_resultat)
# Appel de la première question
questionner()
fenetre.mainloop()
On pourrait grandement améliorer et condenser ce simple programme, mais en l'état, cela te permettra de comprendre comment organiser ton script un peu plus correctement avec de simples fonctions.
Merci beaucoup pour votre réponse je vais essayer de modifier un peu ce programme afin qu'il réponde à mes critères.
Pouvez-vous m'expliquer à quoi sert le "event=None" et le "len" devanr résultat dans cette partie du programme svp ?
# Fonction enregistrant le résultat saisi par l'utilisateur
def valider_resultat(event=None):
# Ajout au dernier élément de résultats, la valeur saisie
resultats[-1].append(entree.get())
# Si nombre de résultats pas encore atteint
if len(resultats) < NOMBRE_QUESTIONS:
# Rappel de la fonction questionner
questionner()
else:
# Le nombre d'opération total a été atteint, affichage des résultats
afficher_resultats()
Pouvez-vous m'expliquer à quoi sert le "event=None" et le "len" devanr résultat dans cette partie du programme svp ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Car avec ma fonction les calculs s'enchaînent en disant si le résultat est correct ou non mais cela ne s'arrête jamais.