Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices du cours Python / postez ici !

    26 mai 2017 à 15:31:08

    La méthode items renvoie chaque élément du dictionnaire sous la forme de tuples (clé, valeur). Et comme la méthode join attend comme argument des chaînes de caractères (et non des tuples) ça créé l'erreur que tu obtiens.

    C'est comme-ci tu faisais:

    ":".join([("antoine", "motdepasse"), ("jeanmichel", "autremotdepasse")])
    • Partager sur Facebook
    • Partager sur Twitter
    Précepte: Le mieux est l'ennemi du bien
      27 mai 2017 à 9:24:19

      Olygrim a écrit:

      La méthode items renvoie chaque élément du dictionnaire sous la forme de tuples (clé, valeur). Et comme la méthode join attend comme argument des chaînes de caractères (et non des tuples) ça créé l'erreur que tu obtiens.

      C'est comme-ci tu faisais:

      ":".join([("antoine", "motdepasse"), ("jeanmichel", "autremotdepasse")])

      Merci pour ta réponse.Du coup il n'y aurait pas un moyen de lister les items en séparant par ":"?
      • Partager sur Facebook
      • Partager sur Twitter
        27 mai 2017 à 9:52:03

        En effectuant une boucle:

        for cle, value in dic.items():
            print("{}: {}".format(cle, value))


        PS: Pas besoin de citer chaque message (surtout si celui-ci se trouve juste avant ;))

        • Partager sur Facebook
        • Partager sur Twitter
        Précepte: Le mieux est l'ennemi du bien
          27 mai 2017 à 16:09:14

          Salut,

          Les certificats sont-ils gratuits en Python ? 

          • Partager sur Facebook
          • Partager sur Twitter
            28 mai 2017 à 0:10:49

            MohamedAmineKhabthani a écrit: > Les certificats sont-ils gratuits en Python ?

            Quels certificats ?

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              28 mai 2017 à 19:46:43

              Bonsoir, j'aurais besoin de quelques eclaircisssements sur la fonction afficher du dernier exercice du cours. Je n'ai pas la moindre idée de comment m'en servir pour faire s'afficher un labyrinthe... Si quelqu'un aurait la gentilesse de m'aiguiller, merci !

                  def afficher(self):
                      """Affiche le labyrinthe dans une console.
              
                      On prend les limites pour afficher la grille. Les obstacles et
                      le robot sont affichés en utilisant leur attribut de classe 'symbole'.
              
                      """
                      y = 0
                      grille = ""
              
                      while y < self.limite_y:
                          x = 0
                          while x < self.limite_x:
                              case = self.grille.get((x, y))
                              if case:
                                  grille += case.symbole
                              else:
                                  grille += " "
              
                              x += 1
              
                          grille += "\n"
                          y += 1
              



              • Partager sur Facebook
              • Partager sur Twitter
                28 mai 2017 à 20:08:01

                Bonjour,

                Il s'agit d'une méthode, celle-ci doit donc être écrite à l'intérieur de la classe. Avec labyrinthe une instance de ta classe, tu pourrais ensuite l'afficher via labyrinthe.affichier() (pour peu que tu ne cites qu'un extrait de la méthode, parce que là il manque encore l'affichage avec un print par exemple).

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  28 mai 2017 à 20:33:49

                  Justement c'est là que je bloque : j'obtiens une attribute error...

                  line 56, in afficher

                      grille += case.symbole

                  AttributeError: 'Mur' object has no attribute 'symbole'

                  J'ai compris qu'il fallait mettre en place un "code" pour savoir ou sont les murs, portes, etc.... Mais la devant cette erreur je me sens toute bête ^^'

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 mai 2017 à 10:49:05

                    Bonjour,

                    Je suis en train de suivre le cours "apprenez à programmer en Python" et j'ai un comportement bizarre dans l'exercice "les listes et tuples 2/2 - une application pratique".

                    L'exercice consiste à retourner un float écrit avec une virgule et avec un certain nombre de caractères après la virgule.

                    J'ai fait l'exercice sans regarder la correction et suis arrivé à quelque chose qui fonctionne:

                    def afficher_flottant(flottant, n=3):
                        """ cette fonction retourne le flottant
                            formatté "à la française" et avec n chiffres après la virgule (3 par defaut)
                            !! attention, ca n'arrondit pas la valeur !! """
                        print(type(flottant))


                        sflot = str(flottant)

                        # formattage de la chaine de sortie
                        try:
                            index = sflot.index(".")

                        except ValueError:
                            try:
                                index = sflot.index(",")
                                print("c'est un français qui a inséré la chaine de caractères, on laisse tel quel (damn frogs!)")
                            except:
                                print("c'est un entier, on le transforme en float")
                                # c'est un entier, on le "convertit" en float
                                sflot+=".0"
                                index=len(sflot)

                        sflot=sflot[0:index+1+n]
                        sflot=sflot.replace(".",",")

                        return sflot

                    Suite à ca j'ai regardé la correction et j'ai vu qu'on pouvait tester facilement le type du paramètre entré (ce qui m'a posé le plus de problèmes dans l'exercice) mais lorsque j'intègre le test suivant dans mon code:

                        print(type(flottant))  => ceci m'indique bien <class 'int'>

                        if type(flottant) is not float and not str:
                            raise TypeError("entrer un flottant ou une chaine")

                    et que j'appelle la fonction avec un int, je ne lève pas l'exception ... y a t-il une syntaxe particulière pour les conditions logiques en python ?

                    merci d'avance

                    ... et bravo pour le cours, il est top  :)

                    Alexandre

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 mai 2017 à 14:09:28

                      Hello,

                      je ne suis pas sûr de vraiment comprendre ta question, mais je pense que tu confonds les tuples et les dictionnaires

                      tuple=('ptitgeek','debutant')

                      dict={'ptitgeek':'debutant'}

                      ce sont 2 types différents, l'un modifiable(dict) , l'autre non ( tuple)

                      tchusss

                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 mai 2017 à 8:38:27

                        Salut,

                        en fait mon problème concerne le test du paramètre d'entrée, pour pouvoir lever une exception si celui-ci est différent d'un float.

                        ma condition if type(flottant) is not float and not str: me semble correcte, cependant ca ne fonctionne pas, c'est pour cela que je me demandais s'il ma syntaxe était correcte.

                        Alexandre

                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 mai 2017 à 8:55:06

                          Non, la structure n'est pas bonne. Il faut faire la comparaison à chaque fois:

                          if type(flottant) != float and type(flottant) != str:


                          Par contre, il me semble que l'utilisation de is (ou is not) n'est pas la bonne solution ici, il faut plutôt utiliser == (ou !=). is et is not sont réservés aux singletons (tel que None):

                          if value is None:


                          Sinon la bonne façon de vérifier le type, c'est d'utiliser la fonction intégrée isinstance:

                          value = 42
                          
                          #soit une seule vérification
                          if isinstance(value, str):
                              print("C'est une chaîne")
                          
                          
                          #Soit plusieurs
                          if isinstance(value, (str, int)):
                               print("C'est une chaîne ou un entier")
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Précepte: Le mieux est l'ennemi du bien
                            1 juin 2017 à 9:22:17

                            Ok,

                            merci pour toutes ces précisions

                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 juin 2017 à 16:19:22

                              Bonjour, je souhaite créer un programme en python permettant de calculer la clé de contrôle d'un code EAN. Cependant, je rencontre quelques problèmes. A chaque fois que j'exécute mon programme sur pyzo, rien ne s'affiche. Pouvez-vous jeter un coup d'œil sur mon programme svp ? Merci d'avance

                               

                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 juin 2017 à 18:46:50

                                Ptitgeek,

                                Voici un extrait du site officiel de Python :

                                items()

                                Return a new view of the dictionary’s items ((key, value) pairs).

                                La méthode items() retourne donc un tuple (clé, valeur).

                                À chaque fois que tu itère sur un dictionnaire (avec ta méthode .join() ici) , .items() va générer un nouveau tuple (clé, valeur)

                                Le problème c'est que tu cherche à joindre des tuples avec une méthode destinée au variable de type str : des chaînes de caractères.

                                Après je ne sais pas ce que tu cherchais à faire mais si tu veux joindre les clés et valeurs, il te faut utiliser une boucle :

                                >>> dic = {"jean-michel": "motdepasse", "antoine": "autremotdepasse"}
                                >>> for cle, valeur in dic.items():
                                ...     print(":".join([cle, valeur]))
                                ... 
                                jean-michel:motdepasse
                                antoine:autremotdepasse
                                

                                Après tu mets ce que tu veux dans la boucle, là j'avoue que l'intérêt est limité sur cet exemple.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 juin 2017 à 12:26:51

                                  Bonjour,

                                  Je suis à la partie 3 et j'ai un petit souci avec les listes. J'ai créé une liste à partir du fichier .txt, qui permet d'utiliser des coordonnées pour se déplacer. Ensuite on extrait les coordonnées du robot, puis, en principe, il devrait être simple de gérer les déplacements.

                                  Seulement voilà, j'ai tout essayé mais la seconde liste que je crée le temps de l'affichage semble liée à la première que je voulais immuable. Je n'arrive vraiment pas à voir ce qui ne vas pas.

                                  Voici un bout de code test:

                                  import os
                                  
                                  def CarteAuto():
                                      '''
                                      Fonction de test pour eviter de passer par toutes les étapes de selection
                                      Retourne le labyrinthe "facile" sous forme de liste 2D sans le robot et les coordonées du robot
                                      '''                                       
                                       
                                      with open(os.getcwd() + '//Cartes//facile.txt','r') as Fichier:
                                          Carte = Fichier.read()
                                          CarteLignes = Carte.split('\n')
                                          
                                      CarteVide=[]
                                      for Ligne in CarteLignes:
                                          TabLigne=[]
                                          for i in Ligne.replace('X',' '):
                                              TabLigne.append(i)
                                          CarteVide.append(TabLigne)
                                              
                                      for Y,Ligne in enumerate(CarteLignes):
                                          for X,Rob in enumerate(Ligne):
                                              if Rob=='X':
                                                  Position=(X,Y)
                                      return (Position,CarteVide)
                                      
                                  def AfficheRobot(Pos,Carte0):
                                      '''
                                      Fonction test qui affiche le labyrinte et le robot en fonction des coordonées du robot
                                      '''
                                      
                                      CarteAvecRobot = list(Carte0)           #Copie de la carte de reference, lue dans fichier .txt, transformée en liste 2D, sans le robot
                                      PosX,PosY = Pos
                                      print(id(CarteAvecRobot)==id(Carte0))   #Verification(debug) que les deux cartes ne sont pas à la même place
                                      
                                      CarteAvecRobot[PosY][PosX]='X'          #Le robot est placé sur la nouvelle carte
                                      
                                      for i in CarteAvecRobot:                #Affichage de la carte avec le robot      
                                          print(''.join(i))
                                         
                                  
                                  Position,CarteVide=CarteAuto()
                                  
                                  AfficheRobot(Position,CarteVide)
                                  
                                  Position = (2,2)
                                  AfficheRobot(Position,CarteVide)



                                  et le résultat :

                                  False
                                  OOOOOOOOOO
                                  O O    O O
                                  O . OO   O
                                  O O O   XO
                                  O OOOO O.O
                                  O O O    U
                                  O OOOOOO.O
                                  O O      O
                                  O O OOOOOO
                                  O . O    O
                                  OOOOOOOOOO 
                                  False
                                  OOOOOOOOOO
                                  O O    O O
                                  O X OO   O
                                  O O O   XO
                                  O OOOO O.O
                                  O O O    U
                                  O OOOOOO.O
                                  O O      O
                                  O O OOOOOO
                                  O . O    O
                                  OOOOOOOOOO 

                                  Si quelqu'un voit ce qui ne va pas, je suis preneur



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    8 juin 2017 à 17:54:56

                                    Quelqu'un pourra me donner des indices pour m'aider à faire cette figure ? Je ne sais pas du tout par où commencer . Merci

                                     
                                    *      *
                                     *    * 
                                      *  *  
                                        *   
                                      *  *  
                                     *    * 
                                    *      *

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      8 juin 2017 à 20:51:28

                                      Bonjour,

                                      J'ai téléchargé le livre epub qui correspond au cours python

                                      J'ai commaencé la partie sur les métaclasse, j'ai remarué le problème suivant.

                                      Le cours a été écrit probablement pour python 3.2 et n'a pas été mis à jours.

                                      Or comme le montre la page suivnate (en anglais)

                                      https://stackoverflow.com/questions/34777773/typeerror-object-takes-no-parameters-after-defining-new

                                      une ligne tellle que la suivante lève une exception :

                                      TypeError: object() takes no parameters



                                      def __new__ (cls, nom, prénom, age) :
                                              print ("Appel de la méthode __new__ de la classe".format(cls))
                                              return object.__new__(cls,nom,prénom,age)   
                                      
                                      # nouvelle ligne
                                              return object.__new__(cls)	

                                       Serait-ce possible de mettre à jour le cours à l'occasion ?

                                      Avez.vous aussi rencontré ce problème ?

                                      veresion de python 3.5.3 et 3.6

                                      Salutations

                                      Battant




                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        9 juin 2017 à 9:58:41

                                        Lucazerty a écrit: > Quelqu'un pourra me donner des indices pour m'aider à faire cette figure ? Je ne sais pas du tout par où commencer . Merci

                                        print('*     *\n *   *\n  * *\n   *\n  * *\n *   *\n*     *')
                                        
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 juin 2017 à 7:50:52

                                          bonjour, j'ai assaye de modifier le programme z casino un petit peu et maintenant, lors de la question "voulez vous quitter", si je met un "o", ca m'affiche le message d'aurevoir(ce qui est normal mais quand je saisi "O", n ou "N", il me repose la question une 2 eme fois et ensuite, si je tape "o" ou "O" cela m'affiche le message d' aurevoir et si je tape "n" ou "N" je restesur le programme. 

                                          ma question est la suivante, pourquoi quand je saisi "O", "N" ou "N", le programme me repose une deuxieme fois la question?, Que faut il que je modifie?

                                          import os
                                          from random import randrange
                                          from math import ceil
                                          
                                          
                                          argent = 1000 
                                          continuer_partie = True
                                          print("Vous vous installez à la table de roulette avec", argent, "$.")
                                          
                                          while continuer_partie: 
                                              
                                              
                                              nombre_mise = -1
                                              while nombre_mise < 0 or nombre_mise > 49:
                                                  nombre_mise = input("Tapez le nombre sur lequel vous voulez miser (entre 0 et 49) : ")
                                          
                                                  try:
                                                      nombre_mise = int(nombre_mise)
                                                  except ValueError:
                                                      print("Vous n'avez pas saisi de nombre")
                                                      nombre_mise = -1
                                                      continue
                                                  if nombre_mise < 0:
                                                      print("Ce nombre est négatif")
                                                  if nombre_mise > 49:
                                                      print("Ce nombre est supérieur à 49")
                                                      
                                              mise = 0
                                              while mise <=0 or mise > argent:
                                                  mise = input('misez')
                                                  try:
                                                      mise = int(mise)
                                                  except ValueError:
                                                      print('tu mises pas des lettres imbecile')
                                                      mise = -1
                                                      continue
                                                  if mise <= 0:
                                                      print('un nombre entre 1 et ton argent')
                                                  if mise > argent:
                                                      print ('un nombre entre 1 et ton argent')
                                          
                                              numero_gagnant = randrange(50)
                                              print('le numero gagnant est', numero_gagnant)
                                              if numero_gagnant == nombre_mise:
                                                  print('gg, tu gagne 3 fois ta mise soit :', mise*3, 'S')
                                                  argent += mise * 3
                                              elif numero_gagnant % 2 == nombre_mise % 2:
                                                  mise = ceil(mise * 0.5)
                                                  print('presque , tu gagne la moitie de ta mise soit:', mise * 0.5, '$')
                                                  argent += mise * 0.5
                                              else:
                                                  print('nope, tu perd', mise, '$')
                                                  argent -= mise
                                          
                                              if argent <= 0:
                                                  print("Vous êtes ruiné ! C'est la fin de la partie.")
                                                  continuer_partie = False
                                              else:
                                                  # On affiche l'argent du joueur
                                                  print("Vous avez à présent", argent, "$")
                                                  quitter = input("Souhaitez-vous quitter le casino (o/n) ? ")
                                                  while quitter != "o" or quitter != "O" or quitter != "n" or quitter != "N":
                                                      quitter = input("Souhaitez-vous quitter le casino (o/n) ? ")
                                                      if quitter == "o" or quitter == "O":
                                                          print('bye')
                                                          continuer_partie = False
                                                          break
                                                      elif quitter == "n" or quitter == "N":
                                                          continuer_partie = True
                                                          break
                                                      
                                                  
                                          os.system('pause')
                                                

                                          Merci d' avance

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            12 juin 2017 à 12:49:02

                                            Bonjour,

                                            Je vous propose d'essayer :

                                            whike repense != "O".loweer | "N".lower() :

                                            Salutations

                                            Battant

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              12 juin 2017 à 13:13:28

                                              @samuel: C'est parce que tu as mal structuré la condition de ta boucle while. Je te renvoie vers un post similaire où j'avais donné une réponse à ce problème ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Précepte: Le mieux est l'ennemi du bien
                                                12 juin 2017 à 15:34:18

                                                while repense != "O".loweer | "N".lower() :

                                                Battant
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  12 juin 2017 à 15:51:18

                                                  # -*- coding: cp1252 -*-
                                                  import re
                                                  k=True
                                                  while k:
                                                      a=raw_input("succession [0-9]{2} egal ou nn ?")
                                                      b=raw_input("[0-9][0-9]")
                                                  
                                                      if re.match(r"([0-9]){2}","a"):
                                                          print "ok1"
                                                          k=False
                                                      else:
                                                          print "plm1"
                                                      if re.match(r"[0-9]{2}","b"):
                                                          print ("ok2")
                                                          k=False
                                                      else:
                                                          print "plm2"

                                                  pouvez vous me dire pourquoi il m'affiche plm1 et plm2 quand je tape par exemple : 23 et 25 ? pourquoi il ne me dit pas ok ?

                                                  et quelle est la différence entre ces deux instructions ?

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    12 juin 2017 à 17:30:21

                                                    C'est sûrement parce que tu mets les variables sous forme de chaîne de caractères (lignes 8 et 13). Il faut plutôt faire:

                                                    if re.match(r"([0-9]){2}", a)
                                                    #                          ^
                                                    #                          |
                                                    #             ne pas mettre les guillemets
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Précepte: Le mieux est l'ennemi du bien
                                                      12 juin 2017 à 20:55:49

                                                      Merci pour ta réponse


                                                      Olygrim a écrit:

                                                      @samuel: C'est parce que tu as mal structuré la condition de ta boucle while. Je te renvoie vers un post similaire où j'avais donné une réponse à ce problème ;)



                                                      -
                                                      Edité par SamuelLhermitte 12 juin 2017 à 20:56:36

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        13 juin 2017 à 10:56:41

                                                        Olygrim a écrit:

                                                        C'est sûrement parce que tu mets les variables sous forme de chaîne de caractères (lignes 8 et 13). Il faut plutôt faire:

                                                        if re.match(r"([0-9]){2}", a)
                                                        #                          ^
                                                        #                          |
                                                        #             ne pas mettre les guillemets


                                                        merci Olygrim pour t'as réponse effectivement c'était le problème. en fait j'ai essayé de reproduire l'exemple du numéro de téléphone d'une autre manière pour cela j'ai décortiquer  l'expression régulière en plusieurs volets, voici le code :

                                                        # -*- coding: cp1252 -*-
                                                        import re
                                                        k=True
                                                        while k:
                                                            a=raw_input("entrer votre numéro de téléphone svp : ")
                                                           
                                                        
                                                            if re.search(r"^0[0-9]",a):
                                                                print ("pas de plm dans : {}.".format(r"^0[0-9]"))
                                                          
                                                            elif re.search(r"[ .-]?[0-9]{2}",a):
                                                                
                                                                print ("pas de plm dans : {}.".format(r"[ .-]?[0-9]{2}"))
                                                            elif re.search(r"([ .-]?[0-9]{2}){4}",a):
                                                                
                                                                print ("pas de plm dans : {}.".format(r"([ .-]?[0-9]{2}){4}"))
                                                                

                                                        maintenant si je fait entrer par exemple 05 23 45 45 le programme ne rentre que dans le premier bloque, je ne comprend pas pourquoi :euh:

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          13 juin 2017 à 11:26:06

                                                          Je ne peux pas t'aider sur ce point, car je connais très mal les expressions régulières :euh:
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Précepte: Le mieux est l'ennemi du bien
                                                            13 juin 2017 à 11:41:00

                                                            HachemiRaouf a écrit: > maintenant si je fait entrer par exemple 05 23 45 45 le programme ne rentre que dans le premier bloque, je ne comprend pas pourquoi

                                                            Parce que c'est tout le principe des elif : tu ne rentres dans la condition que si les précédentes n'ont pas été satisfaites.

                                                            • 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