Telechargé par jemesuser userjames

Nouveau Document Microsoft Word (2)

publicité
from random import randrange
#Q1
def creerListeMorte(n) :
return [0]*n
#Q2
def remplir_liste():
n=int(input("saisir la taille de la liste entre 10 et 1000:"))
while n<10 or n>1000:
n=int(input("Attention la taille de la liste est entre 10 et 1000:"))
L=creerListeMorte(n)
m=int(input("saisir le nombre de cases vivantes entre 1 et "+str(n-1)+":"))
while m<1 or m>n-1:
m=int(input("Attention le nombre de cases vivantes est entre 1 et "+str(n-1)+":"))
#On génère m cases vivantes
for i in range(m):
#générer un indice aléatoire j entre 0 et n-1 pour une seule case vivante
j=randrange(n)
#rendre la case vivante
L[j]=1
return L
#Q3
def afficherListe(L):
for i in L:
if i==0:print('# ',end='')
else:print('* ',end='')
print()#retour à la ligne
#Q4
def nombreVivantes(L):
# soltion 1
return sum(L)
# soltion 2
s=0
for i in L:
s+=i
return s
# soltion 3
s=0
for i in L:
if i==1:s+=i
return s
#sa complexité en notation O
#si n représente la taille de la liste alors la compléxité est : O(n)
#car le parcours complet de la liste est fait une seule fois avec un nombre d'opérations
constant à chaque itération
#Q5
def voisinDroite(L, posCase):
n=len(L)
# soltion 1
return (posCase+1)%n
# soltion 2
if posCase==n-1:return 0
else:return posCase+1
#Q6
def voisinGauche(L,posCase):
n=len(L)
# soltion 1
return (posCase-1)%n
# soltion 2
if posCase==0:return n-1
else:return posCase-1
#Q7
def NobreVoisinVivants(L, posCase):
#indice du voisin droite de la case numéro posCase
voisin_droite=voisinDroite(L,posCase)
#indice du voisin gauche de la case numéro posCase
voisin_gauche=voisinGauche(L,posCase)
#indice du voisin droite de la case numéro voisin_droite
voisin_voisin_droite=voisinDroite(L,voisin_droite)
#indice du voisin gauche de la case numéro voisin_gauche
voisin_voisin_gauche=voisinGauche(L,voisin_gauche)
#calculer la somme des cases vivantes dans ces indices
return L[voisin_droite]+L[voisin_gauche]+L[voisin_voisin_droite]+L[voisin_voisin_gauche]
#Q8
def Evolution(L0,n):
m=len(L0)#O(1)
for k in range(n):
for i in range(m):
#calculer le nombre de cases voisines vivantes de la case i à l'itération k
nbr_voisines_vivantes=NobreVoisinVivants(L0, i)#O(1)
#Si la case i possède exactement 2 voisines vivantes
if nbr_voisines_vivantes==2:
L0[i]=1#elle sera vivante
#Sinon si la case i possède moins d’une ou plus de 2 voisines vivantes à l’itération k
elif nbr_voisines_vivantes<1 or nbr_voisines_vivantes>2:
L0[i]=0#elle sera morte
#else:=>Si la case i possède exactement 1 voisine vivante à l’itération k
#=>rien à faire car elle garde le même état
#Q9
#Si la liste L0 est de taille m, donner la complexité en notation O
#le bloc interne de la boucle for i est de compléxité O(1)
#ce qui veut dire que la compléxité de cette boucle for i est : O(m)
#=>finalement la boucle for k qui compte n itération sera de compléxité n*O(m)=O(n*m)
#ainsi, la fonction Evolution(L0,n) est de complexité O(n*m)+O(1)=O(n*m)
#Q9
def testPopulation():
L=remplir_liste()
print("la liste initiale est:")
afficherListe(L)
Evolution(L,100000)
print("Après Evolution,la liste est:")
afficherListe(L)
testPopulation()
Téléchargement