Back

Générer des nombres pseudo-aléatoires en Python

Générer des nombres pseudo-aléatoires en Python

  1. Objectifs

    • Etre capable de générer un nombre aléatoire en Python.
    • Apprendre à utiliser random.seed()pour initialiser le générateur de nombres pseudo-aléatoires.
  2. Présentation

    • Python a un module intégré que vous pouvez utiliser pour créer des nombres aléatoires.
    • Le nombre aléatoire ou les données générées par le module aléatoire de Python ne sont pas vraiment aléatoires; il est pseudo-aléatoire, c’est-à-dire déterministe.
    • Le module aléatoire utilise la valeur de départ comme base pour générer un nombre aléatoire.




  3. importer la bibliothèque random

    • En Python, pour générer aléatoirement un nombre, il faut d’abord importer la bibliothèque random en plaçant en début de programme l’instruction from random import *. Ensuite, on obtient un entier aléatoire avec la fonction randint(0,100).
  4. La fonction random()

    • La bibliothèque standard Python fournit un module appelé random , qui contient un ensemble de fonctions pour générer des nombres aléatoires.
    • La fonction random() génère un nombre aléatoire compris entre zéro et un [0, 0.1..1]. Les nombres générés avec ce module ne sont pas vraiment aléatoires mais ils sont assez aléatoires pour la plupart des buts.
    • Le module random dispose d’un ensemble de méthodes:
    • Générer des nombres pseudo-aléatoires en Python

      Méthode Description
      seed() Initialiser le générateur de nombres aléatoires
      getstate() Renvoie l’état interne actuel du générateur de nombres aléatoires
      setstate() Restaure l’état interne du générateur de nombres aléatoires
      getrandbits() Renvoie un nombre représentant les bits aléatoires
      randrange() Renvoie un nombre aléatoire entre la plage donnée
      randint() Renvoie un nombre aléatoire entre la plage donnée
      choice() Renvoie un élément aléatoire de la séquence donnée
      choices() Renvoie une liste avec une sélection aléatoire de la séquence donnée
      shuffle() Prend une séquence et renvoie la séquence dans un ordre aléatoire
      sample() Renvoie un échantillon donné d’une séquence
      random() Renvoie un nombre flottant aléatoire entre 0 et 1
      uniform() Renvoie un nombre flottant aléatoire entre deux paramètres donnés
      triangular() Renvoie un nombre flottant aléatoire entre deux paramètres donnés, vous pouvez également définir
      un paramètre de mode pour spécifier le point médian entre les deux autres paramètres
      betavariate() Renvoie un nombre flottant aléatoire entre 0 et 1 basé sur la distribution bêta
      (utilisée dans les statistiques)
      expovariate() Renvoie un nombre flottant aléatoire basé sur la distribution exponentielle (utilisée dans les
      statistiques)
      gammavariate() Renvoie un nombre flottant aléatoire basé sur la
      distribution Gamma (utilisé dans les statistiques)
      gauss() Renvoie un nombre flottant aléatoire basé sur la
      distribution gaussienne (utilisé dans les théories des probabilités)
      lognormvariate() Renvoie un nombre flottant aléatoire basé sur une
      distribution log-normale (utilisée dans les théories des probabilités)
      normalvariate() Renvoie un nombre flottant aléatoire basé sur la
      distribution normale (utilisée dans les théories des probabilités)
      vonmisesvariate() Renvoie un nombre flottant aléatoire basé sur la
      distribution de von Mises (utilisé dans les statistiques directionnelles)
      paretovariate() Renvoie un nombre flottant aléatoire basé sur la
      distribution de Pareto (utilisée dans les théories des probabilités)
      weibullvariate() Renvoie un nombre flottant aléatoire basé sur la
      distribution de Weibull (utilisé dans les statistiques)
  5. La méthode random.seed()

    • Définition et utilisation
      • La méthode seed() est utilisée pour initialiser le générateur de nombres aléatoires.
      • Le générateur de nombres aléatoires a besoin d’un nombre pour commencer (une valeur de départ), pour pouvoir générer un nombre aléatoire.
      • Par défaut, le générateur de nombres aléatoires utilise l’ heure système actuelle.
      • Utilisez la méthode seed () pour personnaliser le numéro de départ du générateur de nombres aléatoires.
    • Syntaxe et paramètre
      • random.seed(a, version)
      • Cette fonction accepte deux paramètres. Les deux sont facultatifs.
        • a: est la valeur de départ. Si la a valeur est None, alors par défaut, l’heure système actuelle est utilisée. Si des sources aléatoires sont fournies par le système d’exploitation, elles sont utilisées à la place de l’heure système. Si la valeur de départ est sous la forme d’un entier est utilisé tel quel.
        • version : 2 (par défaut), un objet str, bytes ou bytearray est converti en un int et tous ses bits sont utilisés.
    • Exemples
      • Générer le même nombre à chaque fois
        • import random
          
          print ("Nombre aléatoire avec seed 30")
          random.seed(30)
          print ("premier numéro ", random.randint(25,50))
          
          random.seed(30)
          print ("Deuxième numéro ", random.randint(25,50))
          
          random.seed(30)
          print ("Troisième numéro ", random.randint(25,50))
        • Nous avons obtenu le même nombre car nous les avons prédéfinis avec la même valeur avant d’appeler random.randint().
      • Générer un nombre différent à chaque fois
        • import random
          
          print("Random number with seed 30")
          random.seed(30)
          print("Premier numéro ", random.randint(25, 50))
          
          print("Deuxième numéro ", random.randint(25, 50))
          
          print("Troisième numéro ", random.randint(25, 50))
          
  6. Générer des valeurs à virgule flottante aléatoires

    • Utiliser random()
      • En appelant les fonctions seed() et random() à partir du module aléatoire Python, on peut également générer des valeurs à virgule flottante aléatoires.
      • Les valeurs seront générées entre 0 et 1.
      • L’exemple ci-dessous génère 10 valeurs à virgule flottante aléatoires.
        • # générer des valeurs à virgule flottante aléatoires
          from random import seed
          from random import random
          # générateur de nombres aléatoires de départ
          seed(4)
          # générer des nombres aléatoires entre 0-1
          for i in range(10):
              value = random()
              print(value)
          
    • Utiliser uniform()
      • Si vous avez besoin de générer des flottants aléatoires situés dans un intervalle [x, y] spécifique, vous pouvez utiliser random.uniform ()
      • random.uniform(10, 35)
        • import random
          
          random.seed(2)
          print(random.uniform(10,35))
          
  7. Générer des valeurs entières aléatoires entre deux bornes

    • Utiliser randint()
      • La méthode randint() renvoie un élément sélectionné de nombre entier dans la plage spécifiée.
      • Syntaxe: randint (début, fin)
      • Paramètres : (début, fin): les deux doivent être des valeurs de type entier.
        • import random
          
          randomList = []
          # Définissez la longueur de la liste sur 10
          for i in range(0, 10):
              # Tous les nombres aléatoires de 0 à 100
              randomList.append(random.randint(0, 100))
          
          print("Impression de la liste de 10 nombres aléatoires")
          print(randomList)
    • Utiliser randrange()
      • Avec random.randrange(), vous pouvez exclure le côté droit de l’intervalle, ce qui signifie que le nombre généré se trouve toujours entre [x, y) et sera toujours plus petit que l’extrémité droite.
  8. Créez une liste de nombres aléatoires sans doublons

    • il existe un moyen simple de générer une liste de nombres aléatoires uniques. En utilisant random.sample (), nous pouvons créer une liste de nombres aléatoires uniques.
      • import random
        
        # Générer 'n' nombres aléatoires uniques dans une plage
        randomList = random.sample(range(0, 100), 10)
        print(randomList)
        
  9. Générer aléatoirement un sous-ensemble d’une liste

    • from random import seed
      from random import sample
      
      seed(6)
      
      list1 = [i for i in range(6)]
      print(list1)
      # select a subset
      sousList = sample(list1, 3)
      print(sousList)
      
  10. Application

    • Énoncé
      • Réaliser un jeu du Plus ou moins dans lequel :
        • L’ordinateur “choisit” un nombre “au hasard” entre 0 et 100,
        • L’utilisateur fait une proposition à laquelle
        • L’ordinateur répond plus “plus grand” ou “plus petit” suivant la valeur de la proposition.
        • L’utilisateur refait une proposition jusqu’à avoir trouvé la bonne réponse.
        • L’ordinateur indique le nombre d’essais effectués.
    • Solution
      • import random
        
        nmin, nmax = 1, 100
        nsol = random.randint(nmin, nmax)
        
        print(f"Vous devez deviner un nombre entre {nmin} et {nmax}.")
        ncoups = 0                      # Compteur de coups
        
        while True:                     # Boucle infinie: sortie explicite par break
            try:
                proposition = input("Votre proposition: ")
                ntest = int(proposition)       # Exception ValueError potentielle
                if not nmin <= ntest <= nmax:
                    raise ValueError()
        
            except ValueError:
                print(f"Votre proposition {proposition!r} "
                      f"n'est pas un entier compris entre {nmin} et {nmax}.")
                continue                # Nouvel essai
        
            except (KeyboardInterrupt, EOFError):  # Interception de Ctrl-C et Ctrl-D
                print("\nVous abandonnez après seulement "
                      f"{ncoups} coup{'s' if ncoups > 1 else ''}!")
                break                   # Interrompt la boucle while
        
            # Si la proposition est valide, le jeu peut continuer.
            ncoups += 1
            if nsol > ntest:
                print("C'est plus.")
            elif nsol < ntest:
                print("C'est moins.")
            else:
                print(f"Vous avez trouvé en {ncoups} coup{'s' if ncoups > 1 else ''}!")
                break                   # Interrompt la boucle while
        



Riadh HAJJI

Laisser un commentaire

Abonnez vous à notre chaîne YouTube gratuitement