Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
Python

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

Un cours complet pour maîtriser Générer des nombres pseudo-aléatoires en Python.

0 chapitres 0 QCM Accès gratuit
  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éthodeDescription
      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)
        
  7. 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))
      
  8. 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)
  9. 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.
  10. 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)
      
  11. 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)
    
  12. Applications

    1. App01
      1. Énoncé

        • Écrivez un programme Python qui simule le lancer de deux dés à six faces. Le programme devrait générer deux nombres pseudo-aléatoires entre 1 et 6 inclus pour représenter les faces des dés. Ensuite, le programme devrait afficher les résultats des deux lancers et la somme des deux nombres.
        • Voici un exemple de sortie attendue :
        Premier dé : 3
        Deuxième dé : 5
        Somme des deux dés : 8
        Solution
        import random
        
        # Génération des nombres pseudo-aléatoires pour les lancers de dés
        de1 = random.randint(1, 6)
        de2 = random.randint(1, 6)
        
        # Affichage des résultats des deux lancers et de leur somme
        print("Premier dé :", de1)
        print("Deuxième dé :", de2)
        print("Somme des deux dés :", de1 + de2)
        
    2. App02
      1. Énoncé

        • Utiliser python pour réaliser un jeu du "jeu_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
        nombre_secret = random.randint(0, 100)
        nombre_d_essais = 0
        
        print("Bienvenue dans le jeu du Plus ou Moins !")
        
        while True:
            proposition = int(input("Devinez le nombre (entre 0 et 100) : "))
            nombre_d_essais += 1
            
            if proposition < nombre_secret:
                print("Plus grand !")
            elif proposition > nombre_secret:
                print("Plus petit !")
            else:
                print("Félicitations ! Vous avez trouvé le nombre secret en", nombre_d_essais, "essais.")
                break
        
    3. App03
      1. Énoncé

        • Écrivez un programme Python qui génère aléatoirement les notes de plusieurs étudiants pour une certaine matière. Le nombre d'étudiants et les notes sont générés de manière pseudo-aléatoire. Ensuite, votre programme doit calculer la moyenne de ces notes et l'afficher.
        • Consignes :
          • Utilisez le module random pour générer les notes pseudo-aléatoires des étudiants.
          • Générez un nombre aléatoire d'étudiants (par exemple, entre 5 et 15).
          • Générez les notes aléatoires pour chaque étudiant (par exemple, entre 0 et 20).
          • Stockez les notes dans une liste.
          • Utilisez les opérations sur les listes pour calculer la moyenne des notes.
          • Affichez la moyenne des notes avec un message approprié.
        • Voici un exemple de sortie attendue :
          Nombre d'étudiants : 10
          Notes des étudiants : [15, 12, 18, 10, 16, 14, 11, 19, 17, 13]
          Moyenne des notes : 14.5
      2. Assurez-vous de gérer les types de données correctement pour stocker les notes et effectuer les calculs de moyenne. Amusez-vous bien ! Si vous avez des questions ou besoin d'aide, n'hésitez pas à demander.
      3. Solution
        import random
        
        # Génération aléatoire du nombre d'étudiants entre 5 et 15
        nombre_etudiants = random.randint(5, 15)
        
        # Génération des notes aléatoires pour chaque étudiant
        notes = random.choices(range(21), k=nombre_etudiants)
        
        # Calcul de la moyenne des notes
        moyenne = sum(notes) / nombre_etudiants
        
        # Affichage des résultats
        print("Nombre d'étudiants :", nombre_etudiants)
        print("Notes des étudiants :", notes)
        print("Moyenne des notes :", moyenne)