Partage
  • Partager sur Facebook
  • Partager sur Twitter

[exercices] Instructions conditionnelles

Anonyme
    4 juillet 2010 à 11:40:02

    Déterminer si un nombre est positif, négatif ou nul.
    Essayez d'abord avec des valeurs fixes, puis actualisez votre programme pour qu'il accepte des entrées numériques de l'utilisateur.

    Mon code version 2.6

    def test(nb):
        if not isinstance(nb, str):
    	if nb==0 : return "zero"
    	elif nb>0 : return "positif"
    	else : return "negatif"
        else : return "Retestez avec un nombre"
    


    Merci pour votre participation.

    Résultat : Ce soir!
    • Partager sur Facebook
    • Partager sur Twitter
      4 juillet 2010 à 12:01:34

      Il faudrait que tu mettes tous tes exercices dans un seul topic car le forum va être rapidement saturé.
      Ensuite je trouve que les exercices sont trop simples et n'apportent rien. Il n'ont aucun rapport avec le python (en algo ça fait : si n > 0 alors n est strictement positif, si n < 0 alors n strictement négatif et si n = 0 alors n est nul).

      Si tu veux faire un topic d'exo pense plutot à des exercices du type "Transformation de fichier", "Compression", "Cryptage", ... (idée venant du forum C++).
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        4 juillet 2010 à 12:04:36

        les exercices se compliqueront au fur et à mesure, libre à toi ou non d'y participer. Quand se sera plus complexe, tu seras le bienvenue, sinon laisse les débutants débuter. Merci

        • Partager sur Facebook
        • Partager sur Twitter
          4 juillet 2010 à 12:08:30

          Bonjour,

          Je suis d'accord avec EPonix, les exos sont beaucoup trop simples et n'apportent rien.
          Moi quand je débutais, j'aimais bien faire des "trucs utiles"(oui le terme est vague) quand même(enfin en minimum).
          Par exemple une calculette, ou autre...

          EDIT:
          Je crois que je me suis trompé, ton topic à l'aire de marcher.
          • Partager sur Facebook
          • Partager sur Twitter
            4 juillet 2010 à 12:13:48

            Voici ma solution :

            #! /usr/bin/env python3
            # -*- coding: utf-8 -*-
            """
            Exercice sur les instructions conditionnelles.
            fichier: exo2.py
            
            """
            
            def pos_neg_nul(nombre):
                """
                Retourne une chaine de caractères : 
                * 'positif' si le nombre donné est positif,
                * 'négatif' s'il est négatif,
                * 'nul' s'il est nul.
            
                """
                if nombre > 0:
                    return 'positif'
                elif nombre < 0:
                    return 'négatif'
                else:
                    return 'nul'
                
            def demander_nombre():
                """
                Demande à l'utilisateur d'entrer un nombre quelconque.
                Insiste tant que l'utilisateur n'a pas rentré de nombre.
            
                """
                requete = 'Entrez un nombre puis validez avec la touche <ENTRÉE>'
                msg_erreur = "{0} n'est pas un nombre..."
                while True:
                    print(requete)
                    entree = input()
                    try:
                        nombre = float(entree)
                    except ValueError:
                        print(msg_erreur.format(entree))
                    else:
                        return nombre
            
            def main():
                """
                Fonction principale : demande un nombre à l'utilisateur puis lui dit s'il
                est positif, négatif ou nul.
                
                """
                nombre = demander_nombre()
                print("Le nombre que vous avez entré est {0}.".format(pos_neg_nul(nombre)))
            
            if __name__ == '__main__':
                main()
            



            Voici un exemple d'utilisation dans la console :

            Python 3.1.2 (r312:79147, Apr 15 2010, 12:35:07) 
            [GCC 4.4.3] on linux2
            Type "help", "copyright", "credits" or "license" for more information.
            >>> import exo2
            >>> exo2.main()
            Entrez un nombre puis validez avec la touche <ENTRÉE>
            quarante-deux
            quarante-deux n'est pas un nombre...
            Entrez un nombre puis validez avec la touche <ENTRÉE>
            42
            Le nombre que vous avez entré est positif.
            >>> exo2.main()
            Entrez un nombre puis validez avec la touche <ENTRÉE>
            -42
            Le nombre que vous avez entré est négatif.
            >>> exo2.main()
            Entrez un nombre puis validez avec la touche <ENTRÉE>
            0
            Le nombre que vous avez entré est nul.
            >>>
            
            • Partager sur Facebook
            • Partager sur Twitter
            Zeste de Savoir, le site qui en a dans le citron !
              4 juillet 2010 à 12:18:29

              Bon, ma solution (en mettant si l'utilisateur veut rcommencer) :

              recommencer = True
              
              while recommencer == True:
                  print("\nEntrez un nombre :")
                  nombreEntre = input()
                  nombreEntre = int(nombreEntre)
                  print("") #C'est pour le saut de ligne 
              
                  if nombreEntre < 0:
                      print(nombreEntre, "est un nombre négatif.")
              
                  elif nombreEntre > 0:
                      print(nombreEntre, "est un nombre positif.")
              
                  else:
                      print(nombreEntre, "est un nombre nul.")
              
                  print("Voulez-vous réessayer ? oui/non")
                  quitter = input()
              
                  if quitter == "non" or quitter == "Non":
                      recommencer = False
              
              • Partager sur Facebook
              • Partager sur Twitter
                4 juillet 2010 à 12:40:50

                Eh voilà, j'ai fini :)
                J'ai rajouté une boucle while pour pouvoir recommencer du début si l'utilisateur le veux. J'ai également testé si le nombre entré était bien un integer.

                #! /usr/bin/python3
                # -*- coding: UTF-8 -*-
                
                continuer = 'y'
                
                while continuer == 'y':
                        print("\nVeuillez entrer un nombre, je vous dirais s'il est négatif, positif ou nul\n")
                        nombre = input('>.....')
                
                        try:
                                nombre = int(nombre)
                        except:
                                print("\n\nErreur de Syntaxe: Veuillez entrer un nombre en chiffres (0123456789)")
                
                        if nombre == 0:
                                print("\nLe nombre %s est nul." % nombre)
                                print("\nVoulez vous recommencer ?")
                                continuer = input('>......(y/n]')
                
                        if nombre > 0:
                                print("\nLe nombre %s est positif" % nombre)
                                print("\nVoulez vous recommencer ?")
                                continuer = input('>......[y/n]')
                
                        if nombre < 0:
                                print("\nLe nombre %s est négatif" % nombre)
                                print("\nVoulez vous recommencer ?")
                                continuer = input('>......[y/n]')
                
                • Partager sur Facebook
                • Partager sur Twitter
                  4 juillet 2010 à 12:51:07

                  Citation : fred1599

                  Déterminer si un nombre est positif, négatif ou nul.
                  Essayez d'abord avec des valeurs fixes, puis actualisez votre programme pour qu'il accepte des entrées numériques de l'utilisateur.



                  L'énoncé est trop imprécis à mon goût. Nombre ? quel type de nombre ? car savoir si un flottant est positif ne se fait pas du tout comme si c'est pour un entier. positif = strictement positif (ce qui n'est pas conforme à l'usage français). Valeurs fixes ? ça veut dire quoi ? "Actualiser" pas très clair. Accepter des entrées peut se faire avec une complexité très variée (gestion des exceptions ou pas). Il me semblerait très souhaitable d'accompagner les énoncés par une réalisation de l'implémentation càd ici un exemple de session entre l'utilisateur et le programme. Ça permet d'écarter l'idée que l'utilisateur entre son nombre sous la forme (par exemple) 4*5-7*3.


                  Citation : Gryfalo



                  if nombreEntre < 0:
                      print(nombreEntre, "est un nombre négatif.")
                  
                  elif nombreEntre > 0:
                      print(nombreEntre, "est un nombre positif.")
                  
                  else:
                      print(nombreEntre, "est un nombre nul.")
                  


                  Tu peux aussi utiliser une expression if/else :

                  >>> def f(n): return "plus" if n>0 else "nul" if n==0 else "moins"
                  ... 
                  >>> f(5)
                  'plus'
                  >>> f(-5)
                  'moins'
                  >>> f(0)
                  'nul'
                  >>>
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 juillet 2010 à 19:58:59

                    Citation

                    J'ai également testé si le nombre entré était bien un integer



                    Je ne sais pas si tu connais, il existe une fonction booléenne pour cela.

                    >>> isinstance(4, int)
                    True
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 juillet 2010 à 20:23:40

                      >>> def f(n): return "plus" if n>0 else "nul" if n==0 else "moins"
                      ... 
                      >>> f(5)
                      'plus'
                      >>> f(-5)
                      'moins'
                      >>> f(0)
                      'nul'
                      >>>
                      


                      Effectivement, on appelle ça un ternaire, et c'est souvent utilisé pour définir des fonctions rapidement. Par contre, pour définir une fonction dans ce style, on utilise plus souvent (même si ce n'est pas obligatoire) le mot-clé lambda (qui permet également d'utiliser une fonction sans la nommer).

                      f = lambda n : "plus" if n > 0 else "nul" if n == 0 else "moins"
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 juillet 2010 à 22:16:50

                        j'ai éssayé certain programmes sur ce topic:
                        Ca marche très bien sauf que les prog ne prennent pas en compte les nombre décimaux...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 juillet 2010 à 22:31:18

                          comme ceux de Plug'n'Play 512 et de Gryfalo .

                          Voila j'ai fait une petite modif qui rend le programme un peu plus performant

                          continuer = 'y'
                          
                          while continuer == 'y':
                                  print("\nVeuillez entrer un nombre, je vous dirais s'il est négatif, positif ou nul\n")
                                  nombre = input('>.....')
                          
                                  try:
                                          nombre = float(nombre) #il suffit de remplacer 'int' par 'float'
                                          
                                          
                                  except:
                                          print("\n\nErreur de Syntaxe: Veuillez entrer un nombre en chiffres (0123456789)")
                          
                                  if nombre == 0:
                                          print("\nLe nombre %s est nul." % nombre)
                                          print("\nVoulez vous recommencer ?")
                                          continuer = input('>......(y/n]')
                          
                                  if nombre > 0:
                                          print("\nLe nombre %s est positif" % nombre)
                                          print("\nVoulez vous recommencer ?")
                                          continuer = input('>......[y/n]')
                          
                                  if nombre < 0:
                                          print("\nLe nombre %s est négatif" % nombre)
                                          print("\nVoulez vous recommencer ?")
                                          continuer = input('>......[y/n]')
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 juillet 2010 à 22:49:28

                            Oui effectivement c'est une bonne idée ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 juillet 2010 à 22:51:51

                              Oui, c'est vrai qu'ils font des trucs bizarres sur les types. En règle générale, il ne vaut mieux pas : on écrit le corps de la fonction comme si l'argument fourni était un nombre, et si c'est autre chose, elle déclenchera une erreur toute seule (qu'on rattraper éventuellement via les exceptions, et qui est préférable à l'affichage d'un texte qui dit qu'on s'est planté mais qui continue le reste du programme comme si de rien n'était, le rendant difficile à débugger).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 juillet 2010 à 23:11:45

                                Moi j'ai un petit problème.
                                Ca m'affiche toujours "Ce nombre est positif"

                                Voici mon code :

                                # -*- coding:Utf-8 -*-
                                
                                # Programme qui détermine si un nombre est positif, négatif ou nul
                                
                                nombre = raw_input("Entrez un nombre : ")
                                
                                if (nombre > 0):
                                    print "Ce nombre est positif !"
                                elif (nombre < 0):
                                    print "Ce nombre est négatif !"
                                else:
                                    print "Ce nombre est nul !"
                                


                                Merci d'avance !

                                Edit: j'utilise la version 2.6.5
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 juillet 2010 à 23:20:19

                                  éssaye avec ça:
                                  nombre = input("Entrez un nombre : ")
                                  nombre = float(nombre)
                                  
                                  if (nombre > 0):
                                      print ("Ce nombre est positif !")
                                  elif (nombre < 0):
                                      print ("Ce nombre est négatif !")
                                  else:
                                      print ("Ce nombre est nul !")
                                  
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    4 juillet 2010 à 23:25:22

                                    Si tu utilises Python 2.6, le input s'écrit bien raw_input, mais il renvoie une chaîne de caractères, que tu dois convertir en nombre ensuite.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 juillet 2010 à 23:28:37

                                      Citation : EPonix

                                      Ensuite je trouve que les exercices sont trop simples et n'apportent rien. Il n'ont aucun rapport avec le python


                                      Personnellement, je trouve l'idée de fred1599 plutôt sympa.
                                      Allez, juste pour te faire mentir, voilà une solution bien tordu, propre à python (python 2.x):

                                      nbr = input("Entrer un nombre: ")
                                      print {nbr==0: "nul", nbr>0: "positif", nbr<0: "negatif"}[True]
                                      


                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 juillet 2010 à 23:43:25

                                        Citation : nyko77


                                        nbr = input("Entrer un nombre: ")
                                        print {nbr==0: "nul", nbr>0: "positif", nbr<0: "negatif"}[True]
                                        




                                        Sympa ce code ;)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          4 juillet 2010 à 23:44:08

                                          Merci Maxibolt, c'est ça :D
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            5 juillet 2010 à 0:25:13

                                            Citation : candide

                                            Citation : nyko77


                                            nbr = input("Entrer un nombre: ")
                                            print {nbr==0: "nul", nbr>0: "positif", nbr<0: "negatif"}[True]
                                            




                                            Sympa ce code ;)


                                            Sympa oui mais pas riche non plus :-°
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              5 juillet 2010 à 0:50:45

                                              Dans le même genre en plus compact on a print ["nul","négatif","positif"][cmp(0,input("Saisir un nombre: "))]
                                              Certes c'est moins subtil ...
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                5 juillet 2010 à 1:00:57

                                                Citation : EMC1

                                                Dans le même genre en plus compact on a print ["nul","négatif","positif"][cmp(0,input("Saisir un nombre: "))]
                                                Certes c'est moins subtil ...



                                                C'est pas mal non plus, encore plus tordu même ;)

                                                Sinon, je vois que je ne suis pas le seul à travailler sous 2.6 plutôt que 3.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  5 juillet 2010 à 1:06:08

                                                  Y en a qui ont eu la même idée avec cmp, je le met quand même :)

                                                  Avec les dicos sans for et while, pour le fun comme certains disent :)

                                                  >>> def test(nb):
                                                  	signe=cmp(nb, 0)
                                                  	result={1: "positif", -1: "negatif", 0: "zero"}
                                                  	print result[signe]
                                                  

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    5 juillet 2010 à 9:55:01

                                                    La vache, certaines solutions sont vraiment élégantes.
                                                    J'ai encore du chemin à faire. :-°
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Zeste de Savoir, le site qui en a dans le citron !

                                                    [exercices] Instructions conditionnelles

                                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                    • Editeur
                                                    • Markdown