Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices du cours Python / postez ici !

    6 septembre 2023 à 11:03:37

    AlexisSubileau2 a écrit:

    Bonjour,

    J'ai commencé la programmation Python avec les cours gratuits ici-même mais je bloque depuis un certain temps sur l'exercice "Contrôlez le déroulement de votre programme avec des conditions".

    J'ai du mal à voir pour le moment le rapport avec le cours juste avant mais je ne suis qu'au début. La fonction isnumeric() n'est abordée à aucun moment donc je n'arrive pas à avancer ... Je suis aussi bloquer avec la consigne 3, je n'arrive pas à mettre ma variable résultat à 0 tout en lui assignant les variables pour obtenir le résultat. J'ai essayer plusieurs fois avec int() et str() mais rien ne fonctionne je suis assez désespéré ahah

    Je vous met un screen de mon code, j'espère que j'ai été assez clair dans mes explications.

    Je remercie d'avance à ceux qui prendront de leur temps pour me répondre !


    si j'ose dire tu démarres "mal" le code en n'utilisant pas le même nom que ceux donnés dans les instructions (c'est un détail, mais les tests vérifient sans doute les variables demandées, je n'ai pas vérifié).
    Pour ton code, peut-être qu'il ne faut pas chercher à faire interpréter la chaine complète, puisque c'est la partie sur les conditions, donc l'esprit serait de tester l'opérateur, et selon celui-ci, faire l'opération en convertissant les nombres entrés en entier après avoir vérifié que ce sont bien des nombres qui ont été saisis (encore une condition).
    Si on ne connait pas comment fonctionne une fonction, on fait une recherche sur internet pour trouver sa documentation => https://docs.python.org/3/library/stdtypes.html#str.isnumeric on y lit qu'elle s'applique sur une chaine.

    La consigne 3 indique d'initialiser la variable résultat à 0 PUIS (donc plus tard dans le programme) lui affecter le résultat de l'opération (ce qui se fera après avoir vérifier que l'on a bien saisis des entrées et une opération reconnue par le programme, et enfin avoir effectué l'opération si tout est ok.

    • Partager sur Facebook
    • Partager sur Twitter
      6 septembre 2023 à 18:33:18

      Bonjour, 

      Je suis à l'exercice PythonBasics2-5 ... j'ai réussi à calculer ce qu'on me demande mais j'ai un doute quant à la solution que j'ai trouvé, car ça ne ressemble pas vraiment à ce qui est demandé... 

      Voici les instructions au point N°4:

      • Crééz une fonction main pour appeler les fonctions :
      • Demandez à l'utilisateur de saisir son salaire annuel.
      • Demandez à l'utilisateur de saisir le nombre d'heures travaillées par semaine.
      • Appelez les fonctions précédemment créées pour calculer le salaire horaire correspondant.
      • Affichez le résultat sous la forme : "Votre salaire horaire est de XX euros".
      • Attention n'appelez pas la fonction main dans le fichier main.py lorsque vous voulez lancer vos tests, pensez à commenter cette ligne pour le lancement des tests !

      et voici mon code : 

      salaire_annuel=int(input("Votre salaire annuel:"))
      heures_travaillees=int(input("Nombre d'heures travaillées par semaine:"))
      
      #point N°1
      def salaire_mensuel(salaire_annuel):
        resultat_mensuel=salaire_annuel/12
        return resultat_mensuel
      resultat_mensuel=salaire_mensuel(salaire_annuel)
      
      #point N°2
      def salaire_hebdomadaire(salaire_mensuel):
        resultat_hebdomadaire=resultat_mensuel/4
        return resultat_hebdomadaire
      resultat_hebdomadaire=salaire_hebdomadaire(salaire_mensuel)
      
      #point N°3
      def salaire_horaire(salaire_hebdomadaire, heures_travaillees):
        resultat_horaire=resultat_hebdomadaire/heures_travaillees
        return resultat_horaire
      resultat_horaire=salaire_horaire(salaire_hebdomadaire, heures_travaillees)
      
      #point N°4
      def fonc_main(): #c'est la fonction main  
        print(f"Votre salaire horaire est de {resultat_horaire} euros")
      
      fonc_main()

      on peut voir que j'ai mis les input en première ligne, et que je n'appelle pas les fonctions demandées .... est-ce qu'il faut que je re essaie en suivant à la lettre le point N°4? ou bien, du moment que ça fonctionne, ce n'est pas grave (je ne passe pas à côté d'un truc?)

      @PierrotLeFou, j'ai vu votre conseil pour le calcul Hebdomadaire=mensuel*12*7/365, je retiens, c'est juste que dans l'exo c'est écrit de diviser par 4 donc je l'ai laissé comme tel, mais je note votre calcul plus proche de la réalité!

      -
      Edité par SandyDouangmala 6 septembre 2023 à 18:34:42

      • Partager sur Facebook
      • Partager sur Twitter
        6 septembre 2023 à 19:35:38

        des erreurs de confusions entre variables et nom de fonction (salaire_hebdomadaire est une fonction, resultat_hebdomaire est la variable qui a récupéré la valeur de la fonction salaire_hebdomadaire, etc

        Par exemple, ligne 12, tu dois utiliser la variable passée en paramètre à la fonction, pas le résultat calculer juste avant.

        Tous tes inputs et récupérations de résultats (utilisation des fonctions) devraient être dans ta fonction principale fonc_main (donc tes lignes 1,2,8,14,20 devraient se placer entre ta ligne 23 et 24 (et tu verras ainsi les erreurs que je mentionne en début de réponse.

        Si tu lances les tests, il faut insérer ces 2 lignes en début de fichier

        from sys import stdin, stdout
        from io import StringIO

        et commenter ta ligne 26 qui appelle fonc_main

        • Partager sur Facebook
        • Partager sur Twitter
          7 septembre 2023 à 16:16:14

          Merci @umfred, est-ce que c'est mieux ainsi? 

          from sys import stdin, stdout
          from io import StringIO
          #point N°1
          def salaire_mensuel(salaire_annuel):
            salaire_mensuel=salaire_annuel/12
            return salaire_mensuel
            
          #point N°2
          def salaire_hebdomadaire(salaire_mensuel):
            salaire_hebdomadaire=salaire_mensuel/4
            return salaire_hebdomadaire
            
          #point N°3
          def salaire_horaire(salaire_hebdomadaire, heures_travaillees):
            salaire_horaire=salaire_hebdomadaire/heures_travaillees
            return salaire_horaire
          
          #point N°4
          def fonc_main(): #c'est la fonction main 
            salaire_annuel=int(input("Votre salaire annuel:"))
            heures_travaillees=int(input("Nombre d'heures travaillées par semaine:"))
            resultat_mensuel=salaire_mensuel(salaire_annuel)
            resultat_hebdomadaire=salaire_hebdomadaire(resultat_mensuel)
            resultat_horaire=salaire_horaire(resultat_hebdomadaire,heures_travaillees)
            print(f"Votre salaire horaire est de {resultat_horaire} euros")
          
          fonc_main() #c'est la fonction main 

          Concernant les 2 lignes en début de fichier, si j'ai bien compris:

          • STDIN c'est pour lire l'entrée de l'utilisateur et STDOUT pour afficher sur l'écran
          • StringIO c'est pour créer un fichier sur la mémoire vive

          ... mais je ne comprends pas la raison de leur rajout en début de fichier? 

          • Partager sur Facebook
          • Partager sur Twitter
            7 septembre 2023 à 17:37:22

            mieux, mais tu devrais donner un autre nom au variable résultat de tes fonctions car elles ont le même nom que tes fonctions (tu n'es d'ailleurs ici pas obligé de passer par une variable)

            SandyDouangmala a écrit:

            Concernant les 2 lignes en début de fichier, si j'ai bien compris:

            • STDIN c'est pour lire l'entrée de l'utilisateur et STDOUT pour afficher sur l'écran
            • StringIO c'est pour créer un fichier sur la mémoire vive

            ... mais je ne comprends pas la raison de leur rajout en début de fichier? 


            Pour ces 2 lignes, c'est pour que les tests (via le bouton Tests des tools) puissent être lancées sans erreur non lié au programme testé (ça a été discuté plus haut dans le fil)

            Edit: ici, elles semblent optionnelles, si elles sont absentes et que la ligne fonc_main (ligne 27) est commentée, ça passe. 

            -
            Edité par umfred 7 septembre 2023 à 17:43:15

            • Partager sur Facebook
            • Partager sur Twitter
              8 septembre 2023 à 15:23:37 - Message modéré pour le motif suivant : Réponse à un message modéré


              Le Tout est souvent plus grand que la somme de ses parties.

                9 septembre 2023 à 11:02:53

                umfred a écrit:

                mieux, mais tu devrais donner un autre nom au variable résultat de tes fonctions car elles ont le même nom que tes fonctions (tu n'es d'ailleurs ici pas obligé de passer par une variable)

                -
                Edité par umfred 7 septembre 2023 à 17:43:15


                "les variable résultat de mes fonctions" c'est bien les lignes 5, 10 et 15? du coup il faut changer comme cela? 

                from sys import stdin, stdout
                from io import StringIO
                #point N°1
                def salaire_mensuel(salaire_annuel):
                  total_mensuel=salaire_annuel/12
                  return total_mensuel
                  
                #point N°2
                def salaire_hebdomadaire(salaire_mensuel):
                  total_hebdomadaire=salaire_mensuel/4
                  return total_hebdomadaire
                  
                #point N°3
                def salaire_horaire(salaire_hebdomadaire, heures_travaillees):
                  total_horaire=salaire_hebdomadaire/heures_travaillees
                  return total_horaire
                
                #point N°4
                def fonc_main(): #c'est la fonction main 
                  salaire_annuel=int(input("Votre salaire annuel:"))
                  heures_travaillees=int(input("Nombre d'heures travaillées par semaine:"))
                  total_mensuel=salaire_mensuel(salaire_annuel)
                  total_hebdomadaire=salaire_hebdomadaire(total_mensuel)
                  total_horaire=salaire_horaire(total_hebdomadaire,heures_travaillees)
                  print(f"Votre salaire horaire est de {total_horaire} euros")
                
                fonc_main() #c'est la fonction main 


                ou alors ce sont les lignes 22, 23, 24? 

                par contre, si je n'utilise pas de variable pour stocker la valeur de ma fonction (ligne 22, 23, 24):

                from sys import stdin, stdout
                from io import StringIO
                #point N°1
                def salaire_mensuel(salaire_annuel):
                  total_mensuel=salaire_annuel/12
                  return total_mensuel
                  
                #point N°2
                def salaire_hebdomadaire(salaire_mensuel):
                  total_hebdomadaire=salaire_mensuel/4
                  return total_hebdomadaire
                  
                #point N°3
                def salaire_horaire(salaire_hebdomadaire, heures_travaillees):
                  total_horaire=salaire_hebdomadaire/heures_travaillees
                  return total_horaire
                
                #point N°4
                def fonc_main(): #c'est la fonction main 
                  salaire_annuel=int(input("Votre salaire annuel:"))
                  heures_travaillees=int(input("Nombre d'heures travaillées par semaine:"))
                  salaire_mensuel(salaire_annuel)
                  salaire_hebdomadaire(total_mensuel)
                  salaire_horaire(total_hebdomadaire,heures_travaillees)
                  print(f"Votre salaire horaire est de {total_horaire} euros")
                
                fonc_main() #c'est la fonction main 

                le test m'inscrit: 

                Traceback (most recent call last):
                  File "main.py", line 27, in <module>
                    fonc_main() #c'est la fonction main 
                  File "main.py", line 23, in fonc_main
                    salaire_hebdomadaire(total_mensuel)
                NameError: name 'total_mensuel' is not defined

                du coup, en suivant le message d'erreur, je remplacerai les lignes 22, 23, 24 comme cela: 

                from sys import stdin, stdout
                from io import StringIO
                #point N°1
                def salaire_mensuel(salaire_annuel):
                  total_mensuel=salaire_annuel/12
                  return total_mensuel
                  
                #point N°2
                def salaire_hebdomadaire(salaire_mensuel):
                  total_hebdomadaire=salaire_mensuel/4
                  return total_hebdomadaire
                  
                #point N°3
                def salaire_horaire(salaire_hebdomadaire, heures_travaillees):
                  total_horaire=salaire_hebdomadaire/heures_travaillees
                  return total_horaire
                
                #point N°4
                def fonc_main(): #c'est la fonction main 
                  salaire_annuel=int(input("Votre salaire annuel:"))
                  heures_travaillees=int(input("Nombre d'heures travaillées par semaine:"))
                  salaire_mensuel(salaire_annuel)
                  salaire_hebdomadaire(salaire_mensuel)
                  salaire_horaire(salaire_hebdomadaire,heures_travaillees)
                  print(f"Votre salaire horaire est de {total_horaire} euros")
                
                fonc_main() #c'est la fonction main 

                mais je me retrouve avec cette erreur

                File "main.py", line 10, in salaire_hebdomadaire
                    total_hebdomadaire=salaire_mensuel/4
                TypeError: unsupported operand type(s) for /: 'function' and 'int'

                ce qui avait déjà été cité plus haut, c'est pourquoi j'ai crée des variables pour les valeurs de retour de mes fonctions ....


                -
                Edité par SandyDouangmala 9 septembre 2023 à 11:38:01

                • Partager sur Facebook
                • Partager sur Twitter
                  11 septembre 2023 à 16:31:18

                  ta 1ère correction était la bonne.

                  Dans ce que j'ai dit, je me suis mal fait comprendre je crois, c'est plutôt au niveau des fonctions elles-mêmes  qu'une variable n'est ici pas nécessaire.

                  exemple:

                  def salaire_hebdomadaire(salaire_mensuel):
                    return salaire_mensuel/4
                  



                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 septembre 2023 à 10:50:24

                    @umfred oh d'accord, merci beaucoup ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 septembre 2023 à 20:41:38

                      Bonjour,

                      Après plusieurs jours à essayer de comprendre ce qui bloque, je tourne en rond. J'ai essayé différentes fonctions mais je n'arrive pas à récupérer les prix pour les mettre dans une liste. Pour le nom du produit c'était assez simple comme il y avait qu'une balise <h2> par élément mais là comme il y a plusieurs éléments paragraphe <p> dans la liste je ne comprends pas quels arguments de soup.find_all() utiliser.

                      Est-ce que quelqu'un aurait une idée ?


                      Ciri a écrit:

                      Bonjour,

                      J'essaye de faire l'exercice du chapitre 'Extrayez et transformez des données avec l’extraction web'.
                      Il faut scrapper ce fichier html

                      <!DOCTYPE html>
                      <html>
                        <head>
                          <title>Exercice extraction HTML</title>
                        </head>
                        <body>
                          <h1>Bienvenue sur notre site web</h1>
                          <p>Voici une liste de nos produits :</p>
                          <ul>
                            <li>
                              <h2>Produit 1</h2>
                              <p>Prix : 10€</p>
                              <p>Description : Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                            </li>
                            <li>
                              <h2>Produit 2</h2>
                              <p>Prix : 20€</p>
                              <p>Description : Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
                            </li>
                            <li>
                              <h2>Produit 3</h2>
                              <p>Prix : 30€</p>
                              <p>Description : Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
                            </li>
                          </ul>
                        </body>
                      </html>

                      Il faut notamment récupérer les prix des produits dans la liste (<ul>) et les stocker dans une liste.

                      Mon code d'affiche pas d'erreur mais rien ne s'affiche quand je veux afficher les prix que j'ai récupéré, je ne vois pas le problème dans mon code

                      import requests
                      from bs4 import BeautifulSoup
                      
                      with open("index.html", 'r') as file:
                        soup = BeautifulSoup(file, 'html.parser')
                      
                      titre_page = soup.title
                      texte_balise_h1 = soup.h1
                      noms_produits = soup.find_all("h2")
                      prix_produits_bs = soup.find_all("p", string ="Prix")
                      prix_produits = []
                      
                      for prix in prix_produits_bs:
                        prix_produits.append(prix.string)
                      
                      print(titre_page)
                      print(texte_balise_h1)
                      print(noms_produits)
                      print(prix_produits)
                      


                      Le résultat :

                      <title>Exercice extraction HTML</title>
                      <h1>Bienvenue sur notre site web</h1>
                      [<h2>Produit 1</h2>, <h2>Produit 2</h2>, <h2>Produit 3</h2>]
                      []

                      -
                      Edité par Ciri 1 septembre 2023 à 19:08:44



                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 septembre 2023 à 19:50:59

                        Bonjour, 

                        Pourquoi quand je mets le code donné dans la leçon "Controlez le deroulement de votre programme avec des conditions" on m'indique que la syntaxe est fausse ? 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 septembre 2023 à 23:13:26

                          ParisIle a écrit:

                          Bonjour, 

                          Pourquoi quand je mets le code donné dans la leçon "Controlez le deroulement de votre programme avec des conditions" on m'indique que la syntaxe est fausse ? 

                          Salut,

                          Il faut respecter l'indentation :

                          >>> ensoleille = True
                          >>> if ensoleille:
                          ...     print("on va à la plage")
                          ... else:
                          ...     print("on reste à la maison")
                          ... 
                          on va à la plage
                          





                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 septembre 2023 à 12:08:41

                            Ciri a écrit:

                            Bonjour,

                            Après plusieurs jours à essayer de comprendre ce qui bloque, je tourne en rond. J'ai essayé différentes fonctions mais je n'arrive pas à récupérer les prix pour les mettre dans une liste. Pour le nom du produit c'était assez simple comme il y avait qu'une balise <h2> par élément mais là comme il y a plusieurs éléments paragraphe <p> dans la liste je ne comprends pas quels arguments de soup.find_all() utiliser.

                            Est-ce que quelqu'un aurait une idée ?



                            Dans ton exemple: 

                            prix_produits_bs = soup.find_all("p", string ="Prix")

                            Tu demandes à ce qu'il affiche la phrase exacte "Prix" et non les phrases qui contiennent le mot "Prix". 

                            Et vu qu'il n'y a pas de phrase correspondant à ta demande, il t'affiche un résultat vide "[]"

                            J'en suis au même exercice que toi, regardes plutôt cette page https://scrapeops.io/python-web-scraping-playbook/python-beautifulsoup-findall/


                            -
                            Edité par SandyDouangmala 15 septembre 2023 à 12:13:07

                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 septembre 2023 à 15:56:25

                              SandyDouangmala a écrit:

                              Ciri a écrit:

                              Bonjour,

                              Après plusieurs jours à essayer de comprendre ce qui bloque, je tourne en rond. J'ai essayé différentes fonctions mais je n'arrive pas à récupérer les prix pour les mettre dans une liste. Pour le nom du produit c'était assez simple comme il y avait qu'une balise <h2> par élément mais là comme il y a plusieurs éléments paragraphe <p> dans la liste je ne comprends pas quels arguments de soup.find_all() utiliser.

                              Est-ce que quelqu'un aurait une idée ?



                              Dans ton exemple: 

                              prix_produits_bs = soup.find_all("p", string ="Prix")

                              Tu demandes à ce qu'il affiche la phrase exacte "Prix" et non les phrases qui contiennent le mot "Prix". 

                              Et vu qu'il n'y a pas de phrase correspondant à ta demande, il t'affiche un résultat vide "[]"

                              J'en suis au même exercice que toi, regardes plutôt cette page https://scrapeops.io/python-web-scraping-playbook/python-beautifulsoup-findall/


                              -
                              Edité par SandyDouangmala il y a environ 3 heures


                              Salut,

                              Le mieux c'est d'utiliser REGEX avec le module re

                              import re
                              from bs4 import BeautifulSoup
                              
                              with open("index.html", 'r') as file:
                                  soup = BeautifulSoup(file, 'html.parser')
                              
                              titre_page = soup.title
                              texte_balise_h1 = soup.h1
                              noms_produits = soup.find_all("h2")
                              prix_produits_bs = soup.find_all("p", string=re.compile("Prix"))
                              prix_produits = []
                              
                              for prix in prix_produits_bs:
                                  prix_produits.append(prix.string)
                              print(prix_produits)



                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 septembre 2023 à 15:04:00

                                Bonjour, 
                                J'en suis à l'exo P3C2 dont voici le HTML: 
                                <!DOCTYPE html>
                                <html>
                                  <head>
                                    <title>Exercice extraction HTML</title>
                                  </head>
                                  <body>
                                    <h1>Bienvenue sur notre site web</h1>
                                    <p>Voici une liste de nos produits :</p>
                                    <ul>
                                      <li>
                                        <h2>Produit 1</h2>
                                        <p>Prix : 10€</p>
                                        <p>Description : Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                                      </li>
                                      <li>
                                        <h2>Produit 2</h2>
                                        <p>Prix : 20€</p>
                                        <p>Description : Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
                                      </li>
                                      <li>
                                        <h2>Produit 3</h2>
                                        <p>Prix : 30€</p>
                                        <p>Description : Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
                                      </li>
                                    </ul>
                                  </body>
                                </html>
                                Voici la solution que j'ai trouvé ... est-elle correcte? 
                                #Utilisez le module beautifulsoup4 pour extraire les informations suivantes et les stocker dans des variables :
                                from bs4 import BeautifulSoup
                                import re
                                #Pour lire le contenu du fichier index.html, vous devez impérativement copier-coller le code suivant :
                                with open("index.html", 'r') as file:
                                    soup = BeautifulSoup(file, 'html.parser')
                                
                                
                                #Récuperez les éléments suivants dans le code html et stockez les dans des variables.
                                #le titre de la page (<title>)
                                titre = soup.title.string
                                #le texte de la balise <h1>
                                balise_h1 = soup.h1.string
                                #les noms et les prix des produits dans la liste (<ul>) (les stocker dans une liste)
                                nom=soup.find_all("h2")
                                nom_texte=[]
                                for n in nom:
                                  nom_texte.append(n.get_text())
                                  
                                prix=soup.find_all("p", string=re.compile("Prix"))
                                prix_texte=[]
                                for x in prix:
                                  prix_texte.append(x.get_text())
                                  
                                nom_prix={
                                  nom_texte[0]:prix_texte[0],
                                  nom_texte[1]:prix_texte[1],
                                  nom_texte[2]:prix_texte[2],
                                }
                                #les descriptions des produits dans la liste (<ul>) (les stocker dans une liste).
                                description=soup.find_all("p", string=re.compile("Description"))
                                desc_texte=[]
                                for desc in description:
                                  desc_texte.append(desc.string)
                                
                                
                                #Affichez les informations extraites dans la console.
                                print (titre)
                                print (balise_h1)
                                print(nom_prix)
                                print(desc_texte)
                                
                                #Convertissez les prix en euro vers le dollars (considérez que le prix dollar = euro * 1.2 ).
                                #Conseils :
                                #N'oubliez pas de retirer toutes les informations inutile (Le mot prix, :, et le €) et de convertir le prix en entier avec la fonction int()
                                #N'oubliez pas d'ajouter le symbole $ à la suite du prix converti, par exemple : 20$.
                                price_pattern=r"\d{2}"
                                regex_pattern=re.compile(price_pattern)
                                prix_euros=regex_pattern.findall(str(prix_texte)) 
                                prix_dollar=[]
                                for euro in prix_euros:
                                  dollar=int(euro)*1.2
                                  prix_dollar.append(dollar)
                                
                                i=0
                                result=[]
                                for px in prix_dollar:
                                  prix_dollar[i]=f"{prix_dollar[i]}$"
                                  result.append(prix_dollar[i])
                                  i+=1
                                print(result)
                                #Affichez la nouvelle liste avec le nom et le nouveau prix en dollars.
                                nouvelle_liste={
                                  nom_texte[0]:result[0],
                                  nom_texte[1]:result[1],
                                  nom_texte[2]:result[2],
                                }
                                print(nouvelle_liste)
                                resultat: 
                                Exercice extraction HTML
                                
                                Bienvenue sur notre site web
                                
                                {'Produit 1': 'Prix : 10€', 'Produit 2': 'Prix : 20€', 'Produit 3': 'Prix : 30€'}
                                
                                ['Description : Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Description : Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', 'Description : Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.']
                                
                                ['12.0$', '24.0$', '36.0$']
                                
                                {'Produit 1': '12.0$', 'Produit 2': '24.0$', 'Produit 3': '36.0$'}
                                Sachant qu'ils ont écrit "#les noms et les prix des produits dans la liste (<ul>) (les stocker dans une liste)" je l'ai ai stocké dans un dictionnaire pour faire des paires clé:valeur. Mais il est aussi possible de stocker dans une liste mais alors j'ai ça: 
                                nom=soup.find_all("h2")
                                nom_texte=[]
                                for n in nom:
                                  nom_texte.append(n.get_text())
                                  
                                prix=soup.find_all("p", string=re.compile("Prix"))
                                prix_texte=[]
                                for x in prix:
                                  prix_texte.append(x.get_text())
                                  
                                nom_prix=[nom_texte,prix_texte]
                                dont le résultat est: 
                                [['Produit 1', 'Produit 2', 'Produit 3'], ['Prix : 10€', 'Prix : 20€', 'Prix : 30€']]
                                Est-ce que c'est le résultat recherché? 

                                -
                                Edité par SandyDouangmala 16 septembre 2023 à 15:05:46

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 septembre 2023 à 12:52:03

                                  Tu dois avoir des tests associés à l'exercice ? (bouton Tests dans la partie bas gauche de replit)
                                  a priori, le type de conteneur (liste, dictionnaire, ..) importe peu

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 septembre 2023 à 20:19:01

                                    Garkam a écrit:

                                    SandyDouangmala a écrit:

                                    Ciri a écrit:

                                    Bonjour,

                                    Après plusieurs jours à essayer de comprendre ce qui bloque, je tourne en rond. J'ai essayé différentes fonctions mais je n'arrive pas à récupérer les prix pour les mettre dans une liste. Pour le nom du produit c'était assez simple comme il y avait qu'une balise <h2> par élément mais là comme il y a plusieurs éléments paragraphe <p> dans la liste je ne comprends pas quels arguments de soup.find_all() utiliser.

                                    Est-ce que quelqu'un aurait une idée ?



                                    Dans ton exemple: 

                                    prix_produits_bs = soup.find_all("p", string ="Prix")

                                    Tu demandes à ce qu'il affiche la phrase exacte "Prix" et non les phrases qui contiennent le mot "Prix". 

                                    Et vu qu'il n'y a pas de phrase correspondant à ta demande, il t'affiche un résultat vide "[]"

                                    J'en suis au même exercice que toi, regardes plutôt cette page https://scrapeops.io/python-web-scraping-playbook/python-beautifulsoup-findall/


                                    -
                                    Edité par SandyDouangmala il y a environ 3 heures


                                    Salut,

                                    Le mieux c'est d'utiliser REGEX avec le module re

                                    import re
                                    from bs4 import BeautifulSoup
                                    
                                    with open("index.html", 'r') as file:
                                        soup = BeautifulSoup(file, 'html.parser')
                                    
                                    titre_page = soup.title
                                    texte_balise_h1 = soup.h1
                                    noms_produits = soup.find_all("h2")
                                    prix_produits_bs = soup.find_all("p", string=re.compile("Prix"))
                                    prix_produits = []
                                    
                                    for prix in prix_produits_bs:
                                        prix_produits.append(prix.string)
                                    print(prix_produits)




                                    Merci à toi et merci à SandyDouangmala en utilisant re.compile j'ai réussi à afficher ce que je voulais !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      22 septembre 2023 à 12:46:46

                                      umfred a écrit:

                                      Tu dois avoir des tests associés à l'exercice ? (bouton Tests dans la partie bas gauche de replit)
                                      a priori, le type de conteneur (liste, dictionnaire, ..) importe peu


                                      Ohlala merci, je ne connaissais pas ce bouton !
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 septembre 2023 à 13:18:14

                                        Ce bouton Tests ne fait que les tests qui ont été fournies avec l'exercice (Je ne sais pas si dans le cadre de ces exercices, on peut rajouter d'autres ou pas)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 octobre 2023 à 19:53:22

                                          Bonjour,

                                          Au dernier quiz du cours "Apprenez les bases du langage Python", la question 6 a un résultat étrange.

                                          L'intitulé spécifie bien que le calcul de conversion *doit* être `prix_euro = 0.8 * prix_dollar`.

                                          Or la réponse correcte donne `prix_euro = prix_dollar / taux_de_change`.

                                          C'est à cause de la division que je n'ai pas sélectionné cette réponse puisque c'est une erreur de calcul.

                                          -
                                          Edité par YvesThirion 18 octobre 2023 à 20:02:18

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            19 octobre 2023 à 14:55:52

                                            c'est pas faux, d'autant plus que dans le code complet donné en fin (et dans l'explication sur ta capture), c'est bien la multiplication qui est faite.

                                            Il y a une coquille dans le code de la réponse supposée bonne en effet.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              21 octobre 2023 à 15:03:21

                                              Je ne sais pas si c'est moi qui est louper quelque chose mais il semble que les exercices baser sur le site du gouvernement anglais pour le dernier chapitre du cours (Extrayez des données du web avec les packages Python), ne soit plus valide, la structure du site à l'air d'avoir était légèrement modifier ce qui invalide tout exemples de code.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                23 octobre 2023 à 15:03:43

                                                Ex0o a écrit:

                                                Je ne sais pas si c'est moi qui est louper quelque chose mais il semble que les exercices baser sur le site du gouvernement anglais pour le dernier chapitre du cours (Extrayez des données du web avec les packages Python), ne soit plus valide, la structure du site à l'air d'avoir était légèrement modifier ce qui invalide tout exemples de code.


                                                Il faut en effet s'adapter quand on fait du scraping à l'évolution de la page ciblée mais tous les exemples fonctionnent dans le cours. De quelle partie tu parles par exemple ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 novembre 2023 à 16:11:38 - Message modéré pour le motif suivant : Merci d’utiliser le bouton code pour insérer un code sur le forum


                                                    20 novembre 2023 à 16:36:06

                                                    ça fonctionne comme écrit "aaaa" n'est pas décimal mais "5" l'est

                                                    isdecimal() method of builtins.str instance
                                                    Return True if the string is a decimal string, False otherwise.

                                                    A string is a decimal string if all characters in the string are decimal and
                                                    there is at least one character in the string.

                                                    Edit: ton code est bon, mais tu veux faire plus précis que la demande de l'exercice. Avec les elif, si tu rentres dans une des conditions, les autres ne sont pas testées.

                                                    -
                                                    Edité par umfred 20 novembre 2023 à 16:46:36

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      20 novembre 2023 à 17:06:52

                                                      D'accord,

                                                      J'ai encore un peu de mal avec tout ça, je vais améliorer mon code et biens respecter les consignes.

                                                      nombre_a_gauche = input('Taper la première valeur numérique :')
                                                      nombre_a_droite = input('Taper la deuxième valeur :')
                                                      operation = input('Taper le symbole de l\'opération souhaitée: ')
                                                      resultat = 0
                                                      
                                                      if nombre_a_droite.isnumeric() and nombre_a_gauche.isnumeric():
                                                          print('Ce sont bien des nombres entiers')
                                                      
                                                      elif isinstance(nombre_a_droite, str) or isinstance(nombre_a_gauche, str):
                                                        print('Erreur: les deux nombres doivent être des nombres entiers')
                                                      
                                                      else:
                                                        print('En attente de la suite du code.')
                                                      

                                                      Que pensez-vous de ça pour un début ?

                                                      J'ai utilisé le isinstance() pour vérifier si c'est bien une chaîne de caractères.

                                                      Bonne soirée.

                                                      -
                                                      Edité par Priama 20 novembre 2023 à 17:08:49

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        20 novembre 2023 à 17:41:19

                                                        Priama a écrit:

                                                        Que pensez-vous de ça pour un début ?

                                                        J'ai utilisé le isinstance() pour vérifier si c'est bien une chaîne de caractères.

                                                        Bonne soirée.

                                                        -
                                                        Edité par Priama il y a 26 minutes


                                                        Salut,

                                                        Ce qu'il faut savoir c'est que input() retourne un str() par défaut donc tes 2 conditions (if, elif) seront valable, if faut convertir en int() même si on entre pas dans la condition elif

                                                        -
                                                        Edité par Garkam 20 novembre 2023 à 17:52:52

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          20 novembre 2023 à 19:47:32

                                                          si on essaie de convertit en int une chaine non numérique, il y aura une erreur. Le code d'origine était bon, le 2nd elif n'était pas nécessaire pour l'exercice si je me rappelle de son énoncé, le calcul se faisant alors dans le bloc de la 1ère condition (2 nombres entiers)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            20 novembre 2023 à 20:37:39

                                                            Bonsoir,

                                                            Merci de vos réponses cela m'aide beaucoup.

                                                            J'ai repris le code d'origine et je reprends la suite demain matin.

                                                            nombre_a_gauche = input('Taper la première valeur numérique :')
                                                            nombre_a_droite = input('Taper la deuxième valeur :')
                                                            operation = input('Taper le symbole de l\'opération souhaitée: ')
                                                            resultat = 0
                                                            
                                                            '''Création des conditions si nombre gauche et droite sont des entiers '''
                                                            
                                                            if nombre_a_droite.isnumeric() and nombre_a_gauche.isnumeric():
                                                              print('Ce sont bien des nombres entiers')
                                                            elif nombre_a_droite.isdecimal() or nombre_a_gauche.isdecimal():
                                                                print('Erreur : les deux nombres doivent être des nombres entiers, et non des décimales.') 

                                                            Je vais finir demain et je vous monterai le résultat.

                                                            Petite question mon code est bien organiser? (Lisible )

                                                            Bonne soirée

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              20 novembre 2023 à 20:38:05

                                                              umfred a écrit:

                                                              si on essaie de convertit en int une chaine non numérique, il y aura une erreur. Le code d'origine était bon, le 2nd elif n'était pas nécessaire pour l'exercice si je me rappelle de son énoncé, le calcul se faisant alors dans le bloc de la 1ère condition (2 nombres entiers)


                                                              Effectivement ça me parait plus cohérent :-)
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Exercices du cours Python / postez ici !

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              • Editeur
                                                              • Markdown