Si title.text est une chaîne de caractères (str) il faut la convertir en nombre d'abord (avec la fonction int() si c'est un nombre entier, float() si c'est un nombre à virgule).
Est-ce que tes nombres sont avec des virgules ou des points? En programmation, il faut mettre des points. Tu peux toujours faire machin = machin.replace(',', '.')
Le Tout est souvent plus grand que la somme de ses parties.
quand je fais float() ça me met "ValueError: could not convert string to float"
Pourtant je pense que c'est bien écrit :
for title in all_titles:
print(title.text)
note = float(title.text) + 35
print(note)
Dans ton premier post tu dis que la liste de nombres c'est all_titles, maintenant c'est title.text. Commence par bien définir le problème et les données avant tout.
Les fonctions que j'ai données marchent sur un seul nombre, pas sur une liste. Découpe d'abord ta chaîne de caractères et applique la fonction sur chaque nombre.
Vérifie la valeur de tes variables avec des print, ça aide. Et si tu n'y arrives pas, met nous ce qu'affichent les print de all_titles et title.text.
all_titles est une liste (composée de nombres décimaux) récupérée sur un site internet (avec l'extension selenium).
Son contenu varie à chaque fois...
Je crois que mon programme foncionne comme ça : all_titles = (title + title + title)
Ce que je voudrais, c'est aditionner tous les title pour pouvoir les additionner à un chiffre qui varie aussi à chaque fois.
Donc pour l'instant j'ai ça :
for title in all_titles:
note = title.text
notepoint = note.replace(",", ".")
noteresult = float(notepoint)
result = sum(noteresult) + 23
print(note)
Mais j'ai une erreur qui me dit "'float' object is not iterable" ce qui veut surement dire que float n'est plus une liste. Je comprend cette erreur car je pars de title, donc il traite les éléments de la liste un après l'autre.
Il faudrait que je parte de all_titles, qui est donc la liste complète contenant des title, mais ca ne fonctionne pas.
Est-ce que tes nombres sont avec des virgules ou des points? En programmation, il faut mettre des points. Tu peux toujours faire machin = machin.replace(',', '.')
Si on récupère des nombres décimaux en français, il se peut que le séparateur décimal soit une virgule. La fonction float n'a pas d'autre paramètre et la chaîne qu'elle prendrait ne reconnaît que le point décimal donc ce n'est pas possible avec elle. Ta solution est bien sût correcte, on peut aussi utiliser atof :
all_titles est une liste de nombres décimaux (du genre 12,6 / 78,9 / 15,9) récupérée d'un site internet (avec le module selenium).
Ces nombres varient tout le temps.
Je voudrais additionner cette liste pour obtenir un seul nombre pour pouvoir faire des opérations avec (dans l'exemple, je voudrais y ajouter 35).
Je crois que mon programme fonctionne comme ca : all_titles = title + title + title + title
Pour l'instant j'ai ça :
for title in all_titles:
note = title.text
notepoint = note.replace(",", ".")
noteresult = float(notepoint)
result = sum(noteresult) + 35
print(note)
Mais quand je lance le programme, j'ai cette erreur : "'float' object is not iterable". Je crois que ca veut dire qui float n'est plus une liste, ce qui se comprend tout a fait car on démarre avec title, et donc le programme fais ce qui est demandé pour chaque donnée de la liste, une après l'autre (au lieu de transformer la liste en une fois comme je le voudrais)
Il faudrait donc commencer le programme avec all_titles, mais ca ne marche pas.
Mais quand je lance le programme, j'ai cette erreur : "'float' object is not iterable".
Il nous faut le message d'erreur complet, tout le traceback et le code qui le provoque.
Diablo76 a écrit:
Salut,
Je crois que l'on t'a déjà demandé de nous faire voir le contenu de all_titles et title avec des prints, c'est plus simple de comprendre.
Non seulement c'est plus simple, mais en plus c'est du debug de base, le petit print sur les variables autour d'un bug, c'est la base du debug, et c'est pas possible de programmer sans savoir debugguer.
Et pour print(titles), j'ai <selenium.webdriver.remote.webelement.WebElement (session="9d828a73c117d91e0fa186c1eaa78685", element="4f96c6f9-cad1-473e-be80-0cc60f2b3b0f")>
Le message d'erreur dit que noteresult est juste un float que la fonction sum (qui attend une liste) ne digère pas.
C'est ce que je comprends aussi, mais alors comment faire pour additionner tous les éléments d'une liste et ensuite les convertir pour pouvoir faire d'autres opérations avec ?
C'est ce que je comprends aussi, mais alors comment faire pour additionner tous les éléments d'une liste et ensuite les convertir pour pouvoir faire d'autres opérations avec ?
Déjà commencer par fabriquer la liste contenant les éléments qu'on veut additionner. Ce qu'on apprend avec tous les tutos.
Et pour print(titles), j'ai <selenium.webdriver.remote.webelement.WebElement (session="9d828a73c117d91e0fa186c1eaa78685", element="4f96c6f9-cad1-473e-be80-0cc60f2b3b0f")>
Enfin pour print(title.text) : (cette commande permet d'afficher les élément de manière plus lisible), j'ai :
14,7
11,8
12,5
12,9
14,4
J'ai ça : Traceback (most recent call last):
File "D:\Programmation\Python\Projet\Site\Notes.py", line 39, in <module>
result = sum(noteresult) + 35
TypeError: 'float' object is not iterable
Ok donc ton dernier code posté était pas trop loin du compte, par contre ce qui te manque ce sont des choses qu'on voit dans des cours pour débutant normalement (faire la somme de nombres stockés dans une liste) donc c'est bizarre que tu arrives à utiliser selenium sans savoir faire ça. Passe quelques heures sur un bon cours parce que tu vas perdre un temps fou si tu n'as pas les notions de base.
Bref, voilà une suggestion :
result = 0
for title in all_titles:
note = title.text
notepoint = note.replace(",", ".")
noteresult = float(notepoint)
result = result + noteresult + 35
print(result)
Je sais pas trop s'il faut garder le +35 à chaque tour de boucle ou le mettre juste à la fin, dans le doute j'ai laissé dans la boucle et tu pourras adapter.
Pour revenir un peu sur les notions de base, la fonction sum() par exemple, elle s'applique sur une liste, donc si tu veux l'utiliser il faut pas la mettre dans la boucle, il faut construire la liste d'abord (en utilisant éventuellement une boucle) et utiliser sum() après :
notes = []
for title in all_titles:
note = title.text
notepoint = note.replace(",", ".")
notes.append(float(noteresult))
sum(notes) + 35
Au début ca ne fonctionnait pas mais tout fonctionne correctement maintenant, c'est juste qu'il fallait mettre un petit temps d'attente pour que le site puisse charger correctement.
Merci à toi @LoupSolitaire.
- Edité par Anonyme 15 mai 2021 à 15:41:07
Problème calcul avec une liste
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Blond, bouclé, toujours le sourire aux lèvres...
Le Tout est souvent plus grand que la somme de ses parties.
Blond, bouclé, toujours le sourire aux lèvres...
Découverte Python Doc Tkinter Les chaînes de caractères
Blond, bouclé, toujours le sourire aux lèvres...
Découverte Python Doc Tkinter Les chaînes de caractères
Blond, bouclé, toujours le sourire aux lèvres...