Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices du cours Python / postez ici !

    1 février 2020 à 15:26:02

    Le prix ne peut pas avoir une virgule ?  Je crois avoir réussi à me dépanner :

      1 #!/usr/bin/python
      2 # coding utf-8
      3 
      4 print('Entrez le prix hors taxe, svp, ou 0 pour terminer : ', end =' ')
      5 prix = input ()
      6 prix = float(prix)
      7 prix_TTC = float(prix)
      8 while prix:
      9     if prix : 
     10       prix_TTC = (prix * 1.2)
     11       print("Le prix TTC est : ", prix_TTC)
     12     else :
     13       print("Entrez un autre prix hors taxe, svp.")
     14     print("Entrez un autre prix hors taxe, svp : ", end =' ')
     15     prix  = float(input())
     16 print("Le calcul est terminé.")
    



    -
    Edité par Julius Eliot 1 février 2020 à 15:27:20

    • Partager sur Facebook
    • Partager sur Twitter
      1 février 2020 à 16:00:10

      Si, si cette "virgule" est en fait un point.

      Mais c'est plutôt 'o' qui n'est pas un nombre et dont la conversion échoue.

      • Partager sur Facebook
      • Partager sur Twitter
        1 février 2020 à 18:48:32

        Je ne me suis pas assez bien exprimé : le prix peut avoir une décimale. J'ai trouvé comment limiter le float à deux chiffres après la virgule (mais cela n'apparaît pas dans le code précédent) et j'ai remplacé le "o" pour arrêter la boucle par "end =' '", ce qui est quand même plus propre. Merci pour votre soutien.


        -
        Edité par Julius Eliot 1 février 2020 à 18:49:17

        • Partager sur Facebook
        • Partager sur Twitter
          4 février 2020 à 9:39:25

          Hello ! Je suis le cours de Python, j'en suis au premier TP de ZCasino, j'ai commencé à le coder, j'ai tout fait sauf les exceptions que je me réserve pour après, j'ai voulu tester mon code mais quand je double clique sur le fichier, la page se ferme directement, alors je ne sais pas si ça vient de mon code qui est faux, mais du coup je ne pourrais pas comprendre sans aide ! Je vous poste mon code 
          # -*-coding:Latin-1 -*
          import os
          from random import randrange 
          from math import ceil 
          argent = 1000  
          print("Vous avez 1000 dollars de mise")
          while argent > 0:
          	numero = input("Choisissez votre numéro: ")
          	mise = input("Choisissez votre mise: ")
          	numero = int(numero)
          	mise = int(mise) 
          	hasard = randrange(50) 
          	if hasard == numero:
          		print("Vous avez gagné ! Quelle chance !")
          		argent += mise * 3
          		ceil(argent)
          		print("Vous avez désormais ", argent, "dollars")
          	elif hasard % 2 == 0:
          		print("Vous êtes tombés sur une case noire ! Vous gagnez 50% de votre mise !")
          		argent += mise * 1.50
          		ceil(argent)
          		print("Vous avez désormais ", argent, "dollars")
          	elif hasard % 2 == 1:
          		print("Vous êtes tombés sur une case rouge ! Vous gagnez 50% de votre mise !")
          		argent += mise * 1.50
          		ceil(argent
          		print("Vous avez désormais ", argent, "dollars")
          	else:
          		print("Vous avez perdu, vous perdez votre mise !")
          		argent -= mise
          		ceil(argent)
          		print("Vous avez désormais ", argent, "dollars")
          os.system("pause")
          • Partager sur Facebook
          • Partager sur Twitter
          "La vérité se trouve au fond d'un puits" Democrite
            4 février 2020 à 10:06:05

            Je ne sais pas si ça va résoudre tout, mais il y a un petit souci avec l'utilisation de la fonction ceil().

            Déjà, tu peux t'en passer en ligne 16, puisque "mise" est entier. Mais par la suite, la bonne utilisation est par exemple : argent += ceil(mise * 1.5). C'est mise * 1.5 qu'il faut arrondir. Et ceil() retourne la valeur arrondie, donc tes appels ne permettent pas de récupérer cette valeur.

            Sinon, y a une parenthèse qui manque en ligne 26.

            Mais, à moins que ce ne soit une consigne de les avoir entières, moi, je mettrais les sommes d'argent en float, avec deux décimales. Je ne suis jamais allé au casino, peut-être que les centimes ne sont pas acceptés ?

            -
            Edité par zakod 4 février 2020 à 10:09:11

            • Partager sur Facebook
            • Partager sur Twitter

            S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

              4 février 2020 à 10:49:48

              Super merci ! Effectivement cela a réglé mon problème, mon programme se lance correctement, je ne sais pas pourquoi !

              Bon je me suis rendu compte que je suis toujours gagnant, il faut que je comprenne pourquoi et que je gère les exceptions maintenant. Si quelqu'un peut m'expliquer d'ailleurs pourquoi je suis toujours gagnant, merci d'avance. 

              • Partager sur Facebook
              • Partager sur Twitter
              "La vérité se trouve au fond d'un puits" Democrite
                4 février 2020 à 11:14:48

                D'après ton if, tu dis ceci : si ton numéro est pair, tu gagnes une demi-fois ta mise, sinon, tu gagnes une demi-fois ta mise ! C'est normal, tu gagnes tout le temps. le else qui suit ne sera jamais exécuté.
                • Partager sur Facebook
                • Partager sur Twitter

                S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

                  5 février 2020 à 8:06:43

                  Bonjour,

                  Soit l'exercice suivant :

                  Jusqu’où faut-il compléter les pointillés pour obtenir un nombre plus grand qu’un milliard ?

                  (1 + 2) × (3 + 4) × (5 + 6) × (7 + 8) × · · ·

                  Je suis débutant et j'essaie de m'entraîner en faisant des exercices simples. Celui-ci me résiste (et ce n'est pas le seul !). La copie d'écran jointe de l'interpréteur Python montre ce que j'ai pu faire : la somme des additions entre parenthèses pour un nombre limité à 10 et non un milliard.
                  J'aurai deux questions.
                  1) Comment à partir de l'algorithme de l'interpréteur ci-joint peut-on obtenir des produits qui satisfassent à la condition de l'exercice ? Autrement dit qu'elle serait la suite pour obtenir des produits ?
                  2) Je ne doute pas qu'il y ait un meilleur algorithme. Lequel ?
                  Merci pour votre aide.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 février 2020 à 8:39:14

                    Ça manque de multiplications dans ton code.

                    Et tu devrais utiliser la boucle non pas pour recalculer un tout nouveau nombre à chaque fois, mais continuer le calcul à partir du nombre de l'itération précédente.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 février 2020 à 8:43:07

                      Julius, à mon avis, il faut une boucle while plutôt que for. En effet, tu ne connais pas le nombre d'itérations, c'est même plus ou moins l'inconnue du problème.

                      Par ailleurs, dans la boucle for, pas besoin d'initialiser i, parce que range(10), ça signifie {0,1,...9}.

                      voilà ma solution.

                      p = 1
                      i = 1
                      n = 0
                      
                      resultat_depasse = int(input("nombre à franchir ?"))
                      while p < resultat_depasse :
                      	s = 2 * i + 1
                      	p *= s
                      	i += 2
                      	n += 1
                      	print("s = {0}, p = {1}".format(s,p))
                      
                      e1 = (s - 1) // 2
                      print("produit = {0}, nombre d'itérations = {1}, deux derniers entiers consécutifs = {2}, {3}".format(p,n, e1, e1 + 1))



                      -
                      Edité par zakod 5 février 2020 à 9:29:58

                      • Partager sur Facebook
                      • Partager sur Twitter

                      S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

                        5 février 2020 à 11:05:10

                        entwanne a écrit:

                        Une boucle for répond aussi très bien à la problématique.

                        De quelle façon ?

                        • Partager sur Facebook
                        • Partager sur Twitter

                        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

                          5 février 2020 à 11:42:54

                          Un for i in itertools.count(1, 2) fonctionne bien par exemple et évite d'avoir à gérer les incrémentations manuellement.

                          for est fait pour itérer sur un ensemble d'éléments : cet ensemble n'a pas besoin d'être fini pour exister et il est donc parfaitement possible d'itérer sur un ensemble infini (générateur).

                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 février 2020 à 12:05:08

                            Merci !

                            Deux questions :

                            1) pour intégrer la condition de sortie, j'ai fait ça, est-ce que c'est correct ? :

                            from itertools import count
                            p = 1
                            n = 0
                            
                            resultat_depasse = int(input("nombre à franchir ?"))
                            for i in itertools.count(1, 2) :
                            	if p < resultat_depasse :
                            		break
                            	s = 2 * i + 1
                            	p *= s
                            	n += 1
                            	print("s = {0}, p = {1}".format(s,p))
                            
                            e1 = (s - 1) // 2
                            print("produit = {0}, nombre d'itérations = {1}, deux derniers entiers consécutifs = {2}, {3}".format(p,n, e1, e1 + 1))

                            (Au final, si c'est bien ça, je préfère encore la boucle while.)

                            2) J'ai voulu faire ceci : from itertools import count
                            mais on me répond "No module named 'itertools'"

                            Où est le souci ?

                            -
                            Edité par zakod 5 février 2020 à 13:13:29

                            • Partager sur Facebook
                            • Partager sur Twitter

                            S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

                              5 février 2020 à 13:42:52

                              Hello tout le monde, 

                              Je vais paraitre sûrement pour un demeuré mais c'est pas grave. 

                              J'en suis au chapitre sur les fichiers de Python, je suis censé changer le répertoire de sauvegarde depuis l'interprétateur python, mais j'ai beau tout essayé, je n'y arrive pas. Je vous met mon code en dessous. 

                              import os
                              os.chdir("C:/test/python.txt")
                              Traceback (most recent call last):
                                File "<stdin>", line 1, in <module>
                              FileNotFoundError: [WinError 3] Le chemin d’accès spécifié est introuvable: 'C:/test/python.txt'
                              

                              Voilà exactement le message d'erreur que j'ai, pourtant j'ai bien crée un dossier sous C: du même nom que dans le code. Dans le cours il est marqué d'utiliser le / mais dans ses exemples il utilise le \, je ne comprends vraiment rien, je suis perdu. J'ai essayé plusieurs chemins et écritures différentes, rien n'y fait. 

                              Alors si quelqu'un a une idée de mon problème,il est là bienvenue :) Merci ! 

                              -
                              Edité par Fizwizbiz 5 février 2020 à 13:43:23

                              • Partager sur Facebook
                              • Partager sur Twitter
                              "La vérité se trouve au fond d'un puits" Democrite
                                5 février 2020 à 16:20:29

                                Tu es sûr que ton répertoire s'appelle python.txt ? Ça ressemble plutôt à un nom de fichier simple.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 février 2020 à 16:26:20

                                  entwanne a écrit:

                                  Ça manque de multiplications dans ton code.

                                  Et tu devrais utiliser la boucle non pas pour recalculer un tout nouveau nombre à chaque fois, mais continuer le calcul à partir du nombre de l'itération précédente.

                                  Oui, c'est justement sur ce point qu'une aide m'aurait été utile.

                                  Pour rappel de l'énoncé :  "Jusqu’où faut-il compléter les pointillés pour obtenir un nombre plus grand qu’un milliard ?

                                  (1 + 2) × (3 + 4) × (5 + 6) × (7 + 8) × · · ·"

                                  Je suis juste un débutant. Merci quoi qu'il en soit.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 février 2020 à 22:53:11

                                    entwanne a écrit:

                                    Ben déjà l'opérateur pour la multiplication est * et non +.

                                    > "Jusqu’où faut-il compléter les pointillés pour obtenir un nombre plus grand qu’un milliard ?  (1 + 2) × (3 + 4) × (5 + 6) × (7 + 8) × · · ·"

                                    Je suis débutant, certes. De là à confondre les produits * et les sommes +... Merci quand même



                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      6 février 2020 à 9:04:46

                                      zakod a écrit:

                                      Julius, à mon avis, il faut une boucle while plutôt que for. En effet, tu ne connais pas le nombre d'itérations, c'est même plus ou moins l'inconnue du problème.

                                      Par ailleurs, dans la boucle for, pas besoin d'initialiser i, parce que range(10), ça signifie {0,1,...9}.

                                      voilà ma solution.

                                      p = 1
                                      i = 1
                                      n = 0
                                      
                                      resultat_depasse = int(input("nombre à franchir ?"))
                                      while p < resultat_depasse :
                                      	s = 2 * i + 1
                                      	p *= s
                                      	i += 2
                                      	n += 1
                                      	print("s = {0}, p = {1}".format(s,p))
                                      
                                      e1 = (s - 1) // 2
                                      print("produit = {0}, nombre d'itérations = {1}, deux derniers entiers consécutifs = {2}, {3}".format(p,n, e1, e1 + 1))

                                      -
                                      Edité par zakod il y a environ 22 heures

                                      Merci, Zakod, pour ta solution. Comme je débute et que je m'applique à comprendre, si tu pouvais commenter et expliquer ce que fait ce code pour répondre à l'énoncé ce serait parfait. Pourquoi les résultats sont-ils entre { }, à quoi correspond le ".format". Je suis le cours, mais je viens à peine de finir la première séquence avec le quiz.

                                      -
                                      Edité par Julius Eliot 6 février 2020 à 9:28:59

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        6 février 2020 à 9:28:27

                                        Julius, tu devrais coller les codes qu'on te montre en exemple et les exécuter. Ça permet de comprendre.

                                        Ensuite, quand on te montre un truc que tu ne connais pas, fais comme moi : Antoine me parle de itertools.count(), je regarde dans la documentation python : https://docs.python.org/fr/3/

                                        Une autre façon de trouver l'info, avec google, par exemple du tape format() python, tu arrives peut-être plus directement au bon endroit.

                                        Par exemple, pour la fonction format(), tu vas l'y trouver.

                                        N'hésite pas à devancer le cours, à acquérir les choses en avance.

                                        Un livre qui me sert bien (je devrais pas le dire, mais c'est tout aussi gratuit que le cours OC, et c'est bien plus complet) :

                                        https://inforef.be/swi/download/apprendre_python3_5.pdf

                                        Quand tu va essayer mon code, prends ma première version, celle où il y a une boucle while, et non pas la seconde où j'essaye l'idée d'Antoine (qui n'a pas répondu à mes questions, peut-être parce qu'il ne les a pas vues). Ou peut-être parce qu'il s'est rendu compte que la boucle while, pour ton cas, y a pas photo.

                                        En fait, elle ne sert qu'à afficher les résultats. Tu comprendras quand tu exécuteras le script.

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

                                          6 février 2020 à 10:57:35

                                          J'ai exécuté le script et, émerveillé, j'ai pensé que le chemin que je dois parcourir est encore long et forcément chaotique. Une ligne comme celle qui suit (la 17) est bien énigmatique à mon niveau.
                                           17 e1 = (s - 1) // 2 

                                          Merci encore pour ta solution et tes conseils que je mets déjà en pratique.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            6 février 2020 à 11:50:42

                                            La longueur et le chaos du chemin, c'est ce qui fait sa beauté et son attrait. L'apprentissage de la programmation, c'est comme l'auto-stop : quand j'étais jeune, il m'est arrivé de rester jusqu'à huit heures au même endroit. Je maudissais l'humanité entière. À la fin, quelqu'un te prend, et tout est oublié. Et bien la programmation, c'est pareil. Des heures carrées à se prendre pour un con, coincé. Et puis tu comprends, et ça repart.

                                            e = (s - 1) divisé par 2, c'est la fonction réciproque de s = 2 * i + 1 (i et e, même chose). J'ai fait  ça pour pouvoir afficher les deux derniers entiers consécutif. Dans l'absolu, il n'y en pas besoin.

                                            le // sert pour obtenir un entier. Si tu fais juste / , c'est un float, la division peut ne pas tomber juste. Si tu fais // ça te donne le quotient de la division entière. 7 / 2 = 3.5, mais 7 // 2 = 3. Dans notre cas, il est certain que le dividende est pair (2 * i est forcément pair, donc 2 * i + 1 impair : s est impair. Donc s - 1 est pair. Peut-être que ça marche avec le simple /, je préfère assurer avec le //.

                                            -
                                            Edité par zakod 6 février 2020 à 11:52:41

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

                                              6 février 2020 à 13:02:06

                                              Très clair. Merci. Pour le livre en v.3, j'avais la v.2 où j'ai trouvé le petit exercice plus haut.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                6 février 2020 à 16:06:07

                                                zakod a écrit: > et non pas la seconde où j'essaye l'idée d'Antoine (qui n'a pas répondu à mes questions, peut-être parce qu'il ne les a pas vues). Ou peut-être parce qu'il s'est rendu compte que la boucle while, pour ton cas, y a pas photo.

                                                Je les avais vues mais pas pris le temps de répondre sur le moment, et le sujet ne se prêt pas vraiment aux discussions croisées. Le soucis du while, c'est que tu dois gérer toutes les incrémentations, donc c'est facilement sujet à bug.

                                                Je ne vois pas le problème d'utiliser un break dans le for, c'est ainsi limpide. Et ainsi tu sors de la boucle à l'endroit précis où tu le souhaites. Tu ne fais pas d'itération surnuméraire ayant pour effet de modifier une dernière fois tes variables i et n alors que ce n'est pas souhaitable.

                                                Vu que le résultat a maintenant été posté, je vais montrer comment je voyais les choses avec un for :

                                                from itertools import count
                                                
                                                r = 1
                                                
                                                for i, n in enumerate(count(1, 2)):
                                                    r *= 2 * n + 1
                                                    if r >= 1_000_000_000:
                                                        break
                                                
                                                print(f'produit supérieur à 1 milliard après {i+1} itérations (dernier multiplicateur: {i}+{i+1})')
                                                

                                                On pourrait se passer du break à l'aide d'une spécificité d'iter, mais ça devient clairement illisible :

                                                r = 1
                                                
                                                for (i, n), _ in zip(enumerate(count(1, 2)), iter(lambda: r >= 1_000_000_000, True)):
                                                    r *= 2 * n + 1
                                                

                                                -
                                                Edité par entwanne 6 février 2020 à 16:10:22

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  6 février 2020 à 17:09:22

                                                  Merci Entwanne

                                                  Effectivement, je comprends que c'est plus sûr. J'ai potassé "enumerate", je comprends pas très bien pourquoi i commence à 0.

                                                  Néanmoins, pour les débutants, je suppose qu'il est plus simple d'utiliser while.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

                                                    6 février 2020 à 19:53:15

                                                    zakod a écrit: > Néanmoins, pour les débutants, je suppose qu'il est plus simple d'utiliser while.

                                                    Pour ce problème en particulier, sûrement, parce qu'itertools ne sera jamais abordé très tôt.

                                                    Mais souvent les cours ont tendance à trop insister sur les boucles while et pas assez sur le for.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      8 février 2020 à 10:40:00

                                                      Bonjour,

                                                      Un petit problème de plus :

                                                      #!/usr/bin/python
                                                      # coding utf-8
                                                       
                                                      L, h, p = 0, 0, 0
                                                      L, h, p = str(input("Entrez la longueur, la hauteur, la profondeur :{'L','h','p'}".format("L","h","p") ))
                                                      vol = L * h * p print("Le volume du rectangle est de : ", vol)

                                                      me donne :

                                                      KeyError: "'L','h','p'"
                                                      

                                                      Une heure de recherche sur Google ne m'a pas donné la solution. Mes débuts sont laborieux. J'aurais pu contourner le problème en faisant trois inputs pour L,h,p. Mais j'ai préférer m'acharner sur cette écriture qui est donnée dans le livre de Gérard Swinnen. J'ai aussi voulu utiliser la méthode .format. (le "<br>" final n'est pas dans le code)

                                                      Merci pour votre aide.


                                                      -
                                                      Edité par Julius Eliot 8 février 2020 à 10:42:49

                                                      • 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