Float(entry.get()) : coud not convert
Résolu
NathanielM
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
NathanielM Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
NathanielM Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je tiens d'abord à dire que j'utilise depuis très peu le forum et Python 3.4.5 ainsi que Tkinter.
Je dois faire un jeu avec des exercices. Le menu du jeu importe un exercice de calcul du coefficient de dilatation et fait appel à la fonction qui lance l'exercice ("ExTime"). L'exercice lancé, on peut appuyer sur le bouton "jouer" qui lance une suite de fonctions.
La 1ère ("ExTimeSpeed") génère une vitesse. L'utilisateur doit entrer le coefficient de dilatation que je veux convertir en float : il y a alors l'erreur "could not convert string to float". J'aimerais aussi utiliser les résultats de ExTimeSpeed dans d'autres fonctions comme ("ExTimeCalc").
Voici le script raccourci en laissant que les 3 fonctions citées:
En espérant avoir été clair...:/
je tiens d'abord à dire que j'utilise depuis très peu le forum et Python 3.4.5 ainsi que Tkinter.
Je dois faire un jeu avec des exercices. Le menu du jeu importe un exercice de calcul du coefficient de dilatation et fait appel à la fonction qui lance l'exercice ("ExTime"). L'exercice lancé, on peut appuyer sur le bouton "jouer" qui lance une suite de fonctions.
La 1ère ("ExTimeSpeed") génère une vitesse. L'utilisateur doit entrer le coefficient de dilatation que je veux convertir en float : il y a alors l'erreur "could not convert string to float". J'aimerais aussi utiliser les résultats de ExTimeSpeed dans d'autres fonctions comme ("ExTimeCalc").
Voici le script raccourci en laissant que les 3 fonctions citées:
from tkinter import* import random score=0 Q=10 def ExTime(): '''exercice dilatation du temps''' def ExTimeCalc(a,b,c): '''calcul le coefficient''' lux=300000000 #si la vitesse est en fraction de la celerite if a=="f": speed=lux*b RappSpeed=(speed**2)/(lux**2) coeff=1/((1-RappSpeed)**0.5) return coeff #sinon si la vitesse est en m/s elif a=='r': RappSpeed=(b**2)/(lux**2) coeff=1/((1-RappSpeed)**0.5) return coeff #lancement du comparateur coeff calcule/reponse ExTimeCheck(c,coeff) def ExTimeSpeed(): '''genere la vitesse, coeff entre par l'utilisateur''' popup.destroy() ReturnMenu.destroy() play.destroy() speedraw=random.uniform(0.1,70000) speedraw=round(speedraw,2) if 0.10<=speedraw<=0.90: #vitesse sous forme de fraction de la célérité SpeedFormat="f" FrameSpeed=Label(canvas,text=(speedraw,"c")) FrameSpeed.place(x=600,y=300) #Entree de la reponse ImputLab=Label(canvas,text="quel est le coefficient de dilatation?") ImputLab.place(x=600,y=400) Imput=Entry(canvas) Imput.place(x=600,y=500) answer=Imput.get() answer=float(answer) #bouton valider, lancement du calcul submit=Button(canvas,text="valider",command=ExTimeCalc(SpeedFormat,speedraw,answer)) submit.place(x=700,y=500) return SpeedFormat,speedraw,answer else: #vitesse en m/s SpeedFormat='r' FrameSpeed=Label(canvas,text=(speedraw,"m/s")) FrameSpeed.place(x=600,y=300) #entree de la reponse ImputLab=Label(canvas,text="quel est le coefficient de dilatation?") ImputLab.place(x=600,y=400) Imput=Entry(canvas) Imput.place(x=600,y=500) answer=Imput.get() answer=float(answer) #bouton valider, lancement du calcul submit=Button(canvas,text="valider",command=ExTimeCalc(SpeedFormat,speedraw,answer)) submit.place(x=700,y=500) return SpeedFormat,speedraw,answer #fenetre et canvas [...] #menu de l'exercice [...] play=Button(canvas, text="jouer",command=ExTimeSpeed) play.place(x=700,y=420) fenetre.mainloop()
En espérant avoir été clair...:/
A voir également:
- Valueerror: could not convert string to float: ''
- Qwerty to azerty - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
- Video to video - Télécharger - Conversion & Codecs
- Majuscule to minuscule - Guide
- Press del to enter setup ✓ - Forum Windows
2 réponses
Bonjour NathanielM,
Ton « Imput.get() » il retourne quoi ? Car selon ce que ça retourne, ça ne peut être convertie en flottant…
Peut-être as-tu mal placé ton « Imput.get() »…
Ton « Imput.get() » il retourne quoi ? Car selon ce que ça retourne, ça ne peut être convertie en flottant…
Peut-être as-tu mal placé ton « Imput.get() »…
Problème résolu. Merci pour l'aide :)
def ExTime():
'''exercice dilatation du temps'''
def ExTimeSpeed():
#entree de la reponse
ImputLab=Label(canvas,text="quel est le temps mesure?")
ImputLab.place(x=600,y=400)
Imput=Entry(canvas, textvariable=answer)
Imput.place(x=600,y=500)
answer = DoubleVar()
play=Button(canvas, text="jouer",command=ExTimeSpeed)
play.place(x=700,y=420)
fenetre.mainloop()
J'ai placé imput.get après avoir créé la barre d'entrée pour la réponse... :/
Tu ne peux pas faire ça, car ta fonction est appelée dès le lancement de ton script.
Il y a plusieurs façon de parer ce problème, la plus courante est l'utilisation d'une fonction anonyme de façon à obtenir :
Parce qu'il n'y aucun problème à récupérer une chaine venant d'un entry et la convertir en float si le format de la chaine est correcte.
Donc affiche ce que contient ton entry avant de le convertir en float.