Aller au contenu

Petit pb Python à rendre le 12/04/2020


angelV

Messages recommandés

Posté(e)

Bonjour à tous,

c'est encore moi, car oui j'ai quelques difficultés en Informatique.

J'ai reçu un nouvel exo par mon professeur comprenant 2 parties.

J'ai fais la première partie (A), assez simple mais la deuxième (B) est une autre histoire...

Pourrais-je avoir de l'aide pour le terminer ?

Voici ce que j'ai fais pour l'instant sur python :

 

import random

def test_meme_anniversaire():
    liste=[random.randint(1,336) for i in range (1,50)]
    print(sorted(liste))
    
    for element in liste:
        if liste.count(element)>1:
            return 1
        else:
            return 0

print(test_meme_anniversaire())
    

 

l'exo.png

  • E-Bahut
Posté(e)

Bonjour,

Pour le moment, j'en suis également resté au A. Après différents tests, pour moi, ton script comporte une erreur ici

for element in liste:
        if liste.count(element)>1:
            return 1
        else:
            return 0

En effet, sauf si le premier élément est compté deux fois, la condition if n'est pas vérifiée, on "return" 0, le comptage s’arrêtant là.

A mon avis, il faut écrire

import random
def test_meme_anniversaire(NOMBRE_PERSONNES):
    L=[random.randint(1,336) for i in range(1,NOMBRE_PERSONNES+1)] le tri est inutile vu le mode de comptage
    for element in L:
        if L.count(element)>1:
            return 1 on sort du test dès la première occurrence
    return 0 uniquement si aucune occurrence n'est trouvée
        
n=int(input('Nombre de personnes : '))
print(test_meme_anniversaire(n))

Je regarde la suite, mais pas tout de suite.

  • E-Bahut
Posté(e)

J'ai regardé la suite, ci-joint deux scripts.

Pour l'affichage de la fréquence

import random
def test_meme_anniversaire(NOMBRE_PERSONNES):
    L=[random.randint(1,366) for i in range(1,NOMBRE_PERSONNES+1)]
    for element in L:
        if L.count(element)>1:
            return 1
    return 0
        
def evolution_frequence(NOMBRE_SIMULATIONS):
    f=0
    for n in range (1,NOMBRE_SIMULATIONS+1):
        if test_meme_anniversaire(30)==1:
            f=f+1
    f=f/NOMBRE_SIMULATIONS
    return f

print(evolution_frequence(100000))

Pour le graphique

import random

import matplotlib.pyplot as plt

def test_meme_anniversaire(NOMBRE_PERSONNES):
    L=[random.randint(1,366) for i in range(1,NOMBRE_PERSONNES+1)]
    for element in L:
        if L.count(element)>1:
            return 1
    return 0
        
def evolution_frequence(NOMBRE_SIMULATIONS):
    for i in range (1,NOMBRE_SIMULATIONS+1):
        f=0
        for j in range (1,NOMBRE_SIMULATIONS+1):
            if test_meme_anniversaire(30)==1:
                f=f+1
        f=f/NOMBRE_SIMULATIONS
        plt.plot(i,f,'+',color='red')

evolution_frequence(1000)
plt.show()

A regarder et à tester.

N.B. : Pour la représentation graphique, je suis parti du principe qu'il fallait avoir autant de points que de simulations, mais ça rallonge énormément le temps de calcul.  Peut-être qu'il faut dissocier les deux et ne prendre par exemple que 100 ou 1000 points.

Dans ce cas, il suffit de changer la ligne

for i in range (1,NOMBRE_SIMULATIONS+1):

en

for i in range (1,101):

ou

for i in range (1,1001):

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...
spam filtering
spam filtering