Connexion élèves

Choisir le(s) module(s) à installer :

Tableaux/tuples - Correction

Exercices

Manipulations de base sur les tableaux


t = [17,38,10,25,72]
print(t)
print(t[2])
print(t.index(25))
t[1] = 69 		# et pas t[38] = 69 !!
print(t)
t2 = t + t + t  # ou : t2 = t*3
print(t2)
print(len(t2))
			

Création de tableaux à l'aide d'une boucle

Un tableau contenant 10 zéros

Quand on a à créer un tableau contenant des éléments de même valeur, autant utiliser la syntaxe la plus simple :


tab = [0]*10
			

Un tableau contenant les nombres pairs de 0 à 50

Les éléments du tableau seront tous différents, il faut donc utiliser une méthode de création de tableau à l'aide d'une boucle.

Le compteur i de la boucle jouera ici deux rôles :

En effet, l'élément sera égal à i si celui-ci est pair.
Comment le savoir ? Une valeur est paire si le reste de sa division par 2 est nul; on fera donc ce test pour savoir si il faut ajouter un élément de valeur i au tableau.

Du point de vue de la méthode, le plus simple ici est de partir d'un tableau initialement vide, puis d'y ajouter les éléments au fur et à mesure à l'aide de la fonction append() :


tab = []  # création d'un tableau vide

for i in range(51): # attention à la borne supérieure dans une boucle for ... in range() !
	if i % 2 == 0:  # si i est pair : utilisation de l'opérateur 'modulo' = reste d'une division
		tab.append(i) # alors on ajoute i au tableau
			

On peut aussi simplement utiliser une boucle dont les bornes sont judicieusement données :


tab = []  # création d'un tableau vide

for i in range(0, 51, 2): # pour i de 0 à 50 par pas de 2
	tab.append(i) # alors on ajoute i au tableau
			

Un tableau contenant les nombres impairs de 1 à 51


tab = []  # création d'un tableau vide

for i in range(52):
	if i % 2 != 0:  # si i est impair
		tab.append(i) # alors on ajoute i au tableau
			

Ou :


tab = []  # création d'un tableau vide

for i in range(1, 52, 2): # pour i de 1 à 51 par pas de 2
	tab.append(i) # alors on ajoute i au tableau
			

Un tableau contenant 10 entiers aléatoires de valeur comprise entre 1 et 100


from random import randint

tab = []
for i in range(10):
	tab.append(randint(1,100))
			

Un tableau de 20 nombres alternant entre 0 et 1


tab = []  # création d'un tableau vide

for i in range(21):
	if i%2 == 0: # si i est pair,
		tab.append(0) # on ajoute un élément 0
	else: # sinon ( donc si i est impair )
		tab.append(1) # on ajoute un élément 1
			

On peut également remarquer que 0, c'est le résultat de l'opération i%2 quand i est pair, et 1, c'est la valeur de l'opération i%2 quand i est impair.
On peut donc simplement ajouter, pour toute valeur de i, le résultat de l'opération i%2 au tableau :


tab = []  # création d'un tableau vide

for i in range(20):
	tab.append(i%2)
			

Un tableau de 100 nombres alternant entre −1 et 1


tab = []

for i in range(100):
	if i%2 == 0: # si i est pair,
		tab.append(1) # on ajoute un élément 1
	else: # sinon ( donc si i est impair )
		tab.append(-1) # on ajoute un élément -1
			

On peut aussi remarquer que :

On pouvait donc aussi simplement écrire :


tab = []

for i in range(100):
	tab.append((-1)**i)
			

( oui, il fallait y penser... )

Un tableau contenant les résultats de la table de multiplication de 7


tab = []

for i in range(13):
	tab.append(7*i)
			

Création de tableaux par compréhension

Les codes ci-dessus se "traduisent" assez facilement en création de tableaux par compréhension :

10 zéros


zeros = [0 for i in range(10)]
			

Nombres pairs

Comme souvent, plusieurs possibilités existent :


pairs = [i for i in range(0, 20, 2)] # on ne prend que les nombres de 2 en 2 en partant de 0
			

pairs = [2*i for i in range(10)] # l'expression '2*i' est toujours paire !
			

pairs = [i for i in range(20) if i%2 == 0] # si le reste de la division par 2 de i est égal à 0, alors i est pair
			

Nombres impairs


impairs = [i for i in range(1,21,2)] # on ne prend que les nombres de 2 en 2 en partant de 1
			

impairs = [2*i + 1 for i in range(10)] # l'expression '2*i +1' est toujours impaire !
			

impairs = [i for i in range(20) if i%2 != 0] # si le reste de la division par 2 de i n'est pas égal à 0, alors i est impair
			

Tableau aléatoire


from random import randint

alea = [randint(1,100) for i in range(10)]
			

Alternance de 0 et de 1


zero_un = [i%2 for i in range(20)]
			

On peut remarquer que Python dispose d'un opérateur ternaire, qui est l'équivalent d'un if ... else ... "en une seule ligne" :


(expression 1) if (condition) else (expression 2)
			

Cet opérateur fonctionne ainsi :

Ici, on pouvait donc écrire :


zero_un = [0 if i%2 == 0 else 1 for i in range(100)]
			

Alternance de 1 et de -1


un_moins_un = [(-1)**i for i in range(100)]
			

On pouvait également écrire :


un_moins_un = [1 if i%2 == 0 else -1 for i in range(100)]
			

Table de 7


table_7 = [7*i for i in range(13)]
			

Applications

Moyenne annuelle


def moyenne_annuelle(notes):
    """ 
    Fonction qui calcule la moyenne de 3 notes.
    Entrée :
        notes = les 3 notes ( sous forme de tuple de 3 float )
    Sortie :
        la moyenne des 3 notes ( float )
    """
    return (t[0] + t[1] + t[2])/3

print(moyenne_annuelle( (12, 13, 9) )) # il faut bien passer un seul tuple comme argument, et pas 3 arguments !
			

11.333333333333334
			

Cadavre exquis


from random import choice

def cadavre_exquis(noms, verbes, complements):
    """
    Fonction qui crée une phrase nom + verbe + complément, en piochant au hasard dans 3 tableaux.
    Entrées :
       les 3 tableaux de noms, de vers et de compléments ( list de str )
    Sortie :
        la phrase construite avec 3 mots tirés au hasard dans les 3 tableaux ( str )
    """
    return choice(noms) + " " + choice(verbes) + " " + choice(complements)

n = ['Le chasseur', 'La présidente', 'Le lapin', 'Pikachu', 'La comète', 'La licorne', 'Le prof']
v = ['mange', 'cherche', 'entretient', 'admire', 'vénère', 'admoneste', 'contemple']
c = ['la gazinière.', 'la forêt.', 'la rencontre.', 'la bicyclette.', 'le micro-processeur.', "l'élève."]

print(cadavre_exquis(n, v, c))
			

La présidente entretient la bicylette.
			

Lancer de dés


from random import randint

def lancer_cinq_des():
    """
    Fonction qui simule 5 lancers d'un dé à 6 faces.
    Entrée : aucune
    Sortie : le résultats des 5 lancers ( list de int )
    """
    return [randint(1, 6) for i in range(5)]

def lancer_des(n):
    """
    Fonction qui simule n lancers d'un dé à 6 faces.
    Entrée : n = le nombre de lancers à simuler ( int )
    Sortie : le résultats des n lancers ( list de int )
    """
    return [randint(1, 6) for i in range(n)]

print(lancer_cinq_des())

print(lancer_des(8))
			

4
[3, 1, 6, 5, 2, 2, 1, 4]

			

Date parlante

Il faut :


def date_parlante(date):
    """
    Fonction qui convertit une date sous la forme jj/mm/aaaa en un format de la forme jj mois aaaa.
    Entrée :
        date = la date au format jj/mm/aaaa ( str )
    Sortie :
        la date au format jj mois aaaa ( str )
    """
    
    mois = ("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")		
			
    t = date.split('/') # attention, il s'agit bien du CARACTERE "/", pas d'un simple "slash"...
    indice_mois = int(t[1])-1 # calcul de l'indice du nom du mois dans le tuple 'mois'
    return t[0] + " " + mois[indice_mois] + " " + t[2]
    
print(date_parlante("19/11/2024"))
>>> 19 novembre 2024