IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Débutant - créer une fonction suivi de conditions [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Par défaut Débutant - créer une fonction suivi de conditions
    Bonjour,

    J'ai créé un petit programme (c'est mon premier) pour faire deviner un nombre mystère tiré au sort aléatoirement.
    Il fonctionne.

    Maintenant, je voudrais évidemment y ajouter des options supplémentaire. Je souhaiterais que l'utilisateur puisse choisir la plage dans laquelle le nombre est choisi aléatoirement.
    Pour faire quelque chose de propre, je souhaite utiliser des fonctions.
    J'ai donc créé deux fonctions qui devraient choisir le nombre aléatoire entre une fourchette et une autre.

    Ensuite, j'utilise les conditions pour exécuter la fonction correspond au choix.

    Eh bien, ça ne fonctionne pas. Mon erreur doit être vraiment ridicule, mais mon niveau de débutant ne me permet pas d'aller plus loin.
    Si vous voyez mon erreur, je vous serais reconnaissant d'avoir un petit coup de pouce...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #coding:utf-8
     
    #Salutations
    #\n permet de passer à la ligne.
    user = input("Bonjour ! Quel est ton prénom ?\n > ")
    user = str(user)
    print("Bonjour {}, ravi de faire ta connaissance !\nNous allons jouer au nombre mystère.\nJe vais choisir un nombre entre 1 et 100.\nFais-moi ensuite tes propositions.\nJe te dirai si le nomnre est plus grand ou plus petit".format(user))
     
    def choixa():
      from random import randint
      randint(1, 10)
      import random
      nbr = random.randint(1, 10)
      nbr = int(nbr)
     
    def choixb():
      from random import randint
      randint(1, 100)
      import random
      nbr = random.randint(1, 100)
      nbr = int(nbr)
     
    choix = input("Tapez 1 pour utiliser un nombre entre 1 et 10.\nTapez 2 pour utiliser un nombre entre 1 et 100\n> ")
    choix=str(choix)
     
    if choix == 1:
      choixa()
     
    elif choix == 2:
      choixb()
     
    #Boucle pour donner les indications à l'utilisateur
    #while rep == nbr:
     
    rep = 0
    rep = int(rep)
     
    #Tant que réponse est différente du nombre mystère
    while rep != nbr:
      rep = input("Selon vous, quel est le nombre mystère ? \n> ")    
      rep = int(rep)
     
      if rep > nbr:
        print("Le nombre mystère est plus petit")
      elif rep < nbr:
        print("Le nombre mystère est plus grand")
      else:
        print("Oui ! Le nombre mystère était effectivement : ", nbr)

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tes fonctions doivent retourner le nombre choisit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if choix == 1:
        nbr = choixa()
     
    elif choix == 2:
        nbr = choixb()
    Quelques remarques:

    1. user = str(user) est inutile, user est déjà de type string.
    2. rep = int(rep) est inutile, rep est déjà de type integer.
    3. On met les import en début de programme pas dans les fonctions.
    4. Tes fonctions sont trop compliquées, ceci suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    import random
    def choixa():
        return random.randint(1, 10)

  3. #3
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Par défaut
    D'abord, merci pour votre aide !
    Vos explications sont très claires et m'aident à comprendre mes erreurs et la logique.

    J'ai modifié le code en tenant compte de vos conseils. Cela fonctionne jusqu'à la boucle. Là, on me dit que la variable nbr n'est pas définie.

    Je me dis donc que malgré tout les fonctions ne font pas leur jod ou alors les conditions ne sont pas prises en compte. Ou alors il y encore quelque chose qui m'échappe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #coding:utf-8
     
    #Salutations
    #\n permet de passer à la ligne.
    user = input("Bonjour ! Quel est ton prénom ?\n > ")
    print("Bonjour {}, ravi de faire ta connaissance !\nNous allons jouer au nombre mystère.\nJe vais choisir un nombre entre 1 et 100.\nFais-moi ensuite tes propositions.\nJe te dirai si le nomnre est plus grand ou plus petit".format(user))
     
    import random
     
    def choixa():
      return random.randint(1, 10)
     
    def choixb():
      return random.randint(1, 100)
     
     
    choix = input("Tapez 1 pour utiliser un nombre entre 1 et 10.\nTapez 2 pour utiliser un nombre entre 1 et 100\n> ")
    choix=str(choix)
     
    if choix == 1:
      nbr = choixa()
     
    elif choix == 2:
      nbr = choixb()
     
    rep = 0
     
    #Tant que réponse est différente du nombre mystère
    while rep != nbr:
      rep = input("Selon vous, quel est le nombre mystère ? \n> ")    
      rep = int(rep)
     
      if rep > nbr:
        print("Le nombre mystère est plus petit")
      elif rep < nbr:
        print("Le nombre mystère est plus grand")
      else:
        print("Oui ! Le nombre mystère était effectivement : ", nbr)

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    choix=str(choix) --> choix = int(choix)

  5. #5
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Par défaut
    Citation Envoyé par VinsS Voir le message
    choix=str(choix) --> choix = int(choix)
    Damn ! C'était tellement évident !
    Je vous remercie pour votre patience. Ce programme est inutile, mais me permet d'apprendre. Grâce à vous, j'ai évité la phase de découragement.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par vinceaspi Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def choixa():
      return random.randint(1, 10)
     
    def choixb():
      return random.randint(1, 100)
    Pour éviter d'avoir à écrire plusieurs fonctions similaires (parce que choisir entre 1 et 10 ou entre 1 et 100 franchement, c'est kifkif et que feras-tu s'il faut choisir ensuite entre 1 et 1000 ou même entre 10 et 15000 ????) on utilise ce qu'on appelle "paramètre de fonction" => un élément venu de l'extérieur lui permettant de "paramétrer" son travail

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def choixN(n):
      return random.randint(1, n)
    Ici la valeur "n" (10 ou 100 ou autre...) sera passée par l'appelant. Remarque, c'est déjà ce qui se passe quand tu appelles "randint()" avec 1 et 10 ou avec 1 et 100.

    Citation Envoyé par vinceaspi Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if choix == 1:
      nbr = choixa()
     
    elif choix == 2:
      nbr = choixb()
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if choix == 1:
      nbr = choixN(10)
     
    elif choix == 2:
      nbr = choixN(100)

    Ou alors plus directement nbr=choixN(10**choix) mais ça implique une relation mathématique entre le choix et le nombre (10^choix) pas forcément obligatoire. D'autant plus qu'il y a ensuite plein d'outils permettant de faire la même chose sans passer par ces "if". Tu verras, Python est un langage bien sympa. Ceci dit, encapsuler randint (qui est déjà une fonction directement utilisable) dans une fonction "choixa" ou "choixb" (ou même "choixN") qui ne lui apporte aucune plus-value...

    Citation Envoyé par vinceaspi Voir le message
    Grâce à vous, j'ai évité la phase de découragement.
    Propos étranges de la part d'un enseignant qui justement de par son métier, devrait avoir l'habitude de ces premiers écueils inévitables et surtout relativement mineurs !!! Un peu de concentration, de réflexion et on en vient vite à bout.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Propos étranges de la part d'un enseignant qui justement de par son métier, devrait avoir l'habitude de ces premiers écueils inévitables et surtout relativement mineurs !!! Un peu de concentration, de réflexion et on en vient vite à bout.
    Je vous remercie pour votre proposition d’amélioration. C’est effectivement plus propre. J’ai procédé au changement.

    Quant au découragement, ma fonction (restons dans le monde du codage) n’empêche pas parfois quelques moments d’égarement : cette période est particulièrement difficile pour toutes les professions et je pourrais reléguer cette auto-formation en second plan pour assumer tout le reste (je dois mettre mon école à jour pour les cours à distance, le matériel, la formation des enseignants, etc). Donc oui, je ne suis pas à l’abri parfois du découragement, mais ce n’est que temporaire.

  8. #8
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2020
    Messages : 9
    Par défaut
    Je vous présente mon programme abouti grâce à votre aide. J'ai ajouté une boucle pour recommencer la partie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #coding:utf-8
     
    #Salutations
    #\n permet de passer à la ligne.
    user = input("Bonjour ! Quel est ton prénom ?\n\n > ")
    print("Bonjour {}, ravi de faire ta connaissance !\n\nNous allons jouer au nombre mystère.\n\nJe vais choisir un nombre entre 1 et 100.\n\nFais-moi ensuite tes propositions.\n\nJe vous dirai si le nombre est plus grand ou plus petit\n\n".format(user))
     
    import random
     
    #Tirage au sort
    def choixN(n):
      return random.randint(1, n)
     
    #Balise pour recommencer la partie
    recommencer = True
    recommencer = bool(recommencer)
     
    #Boucle qui va permettre de recommencer la partie
    while recommencer == True:
     
      choix = input("Tapez 1 pour utiliser un nombre entre 1 et 10.\nTapez 2 pour utiliser un nombre entre 1 et 100.\nTapez 3 pour utiliser un nombre entre 1 et 1000.\n\n> ")
      choix=int(choix)
     
      if choix == 1:
        nbr = choixN(10)
     
      elif choix == 2:
        nbr = choixN(100)
     
      elif choix == 3:
        nbr = choixN(1000)
     
      rep = 0
     
      #Tant que réponse est différente du nombre mystère
      while rep != nbr:
        rep = input("Selon vous, quel est le nombre mystère ? \n\n> ")    
        rep = int(rep)
     
        if rep > nbr:
          print("Le nombre mystère est plus petit\n\n")
        elif rep < nbr:
          print("Le nombre mystère est plus grand\n\n")
        else:
          print("Oui ! Le nombre mystère était effectivement : ", nbr)
          recommencer = input("Voulez-vous recommencer une partie ? (o / n)")
          if recommencer == "o" or recommencer == "O":
            recommencer = True
          else :
            recommencer = False
            print("Merci d'avoir joué {}, à bientôt !".format(user))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/03/2010, 14h01
  2. [Débutant] Créer une fonction
    Par nadsky dans le forum Octave
    Réponses: 2
    Dernier message: 28/09/2008, 21h22
  3. Réponses: 6
    Dernier message: 10/08/2005, 11h36
  4. Créer une fonction mathématique pendant l'exécution
    Par zeprogrameur dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2004, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo