VaultBy ENSAMIENParrainage
Notebook

Partie : Listes | slicing | indices négatifs

correction.ipynb

Programmation avancée (Python)

TDP 02
Listes, chaines de caractères

Répondez aux questions et envoyez à votre classe room le fichier
ayant comme nom le format suivant

  • TDP_02_Python_NOM_PRENOM.ipynb

    </ul>
    

Nom Prénom :

CHOUBIK Houssam

Liste : Rappels

  • écrire un progreamme qui affiche le nombre d'éléments d'une liste (sans utiliser len())
L = [1,2,3,4]
c = 0
for _ in L:
    c += 1
print(c)
4
  • écrire un programme qui affiche la somme cumulative de la liste LC
LC = [3, 9, 10, 4, 1, 8]
print(LC)
[3, 9, 10, 4, 1, 8]
# écrire votre solution ici : doit afficher [3, 12, 22, 26, 27, 35]
LC = [3,9,10,4,1,8]
somme = []
acc = 0
for v in LC:
    acc += v
    somme.append(acc)
print(somme)  
[3, 12, 22, 26, 27, 35]

Ecrire un programme qui affiche tous les éléments dupliqués d'une liste données sans utiliser aucune fonction prédéfinie en Python.

* indication : utiliser une double boucle for
# Exemple
# L = [7 , 21 , 5 , 12 , 7 , 91 , 21 ,  12 , 28]
# la sortie est: [7, 21, 12]

L = [7, 21, 5, 12, 7, 91, 21, 12, 28]

d = []   
n = 0
for _ in L:
    n += 1

for i in range(n):
    for j in range(i + 1, n):
        if L[i] == L[j] and L[i] not in d:
            d.append(L[i])
print(d)   
[7, 21, 12]
  • Générer et afficher une liste L contenant, dans l'ordre, des entiers de 0 à 60
    • indication : utiliser la fonction range()
# solution 1 : en utilisant list()
L = list(range(61))
print(L)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]
# solution 2 : en utilisant []
L=[i for i in range(61)]
print(L)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]
  • Afficher dans un ordre croissant tous les éléments pairs (sans utilisation de boucle)
pairs = L[0:61:2]
print(pairs)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60]
  • Afficher dans un ordre décroissant tous les éléments impairs (sans utilisation de boucle)
impairs = L[59:0:-2]
print(impairs)
[59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1]
  • Mettre dans la liste L3 tous les éléments de L multiples de 3 (sans utilisation de boucle)
  • Mettre dans la liste L4 tous les éléments de L multiples de 4 (sans utilisation de boucle)
L3 = L[0:61:3]
L4 = L[0:61:4]

print("L3 =", L3)
print("L4 =", L4)
L3 = [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60]
L4 = [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60]
  • Afficher tous les éléments de L3 exceptés les 5 derniers éléments (sans utilisation de boucle)
L3_nouvelle=L3[0:-5]
print(L3_nouvelle)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45]
  • Afficher tous les éléments de L4 exceptés les 7 premiers éléments (sans utilisation de boucle)
L4_nouvelle=L4[7:]
print(L4_nouvelle)
[28, 32, 36, 40, 44, 48, 52, 56, 60]

Chaines de caractères

Exercice :
Écrire un programme qui prend en paramètre une liste d’entiers T et et qui affiche la moyenne des éléments de T.

import random
L = [random.randint(0, 10) for i in range(5)]
print(L)
[5, 6, 0, 0, 4]
# solution 1 : En utilisant une boucle

somme = 0
n = 0
for x in L:       
    somme += x        
    n += 1        
if n == 0:        
    print("None")

moy = somme/n

print(somme)
print("Moyenne =", moy)
15
Moyenne = 3.0
# solution 2 : En utilisant une sum()
somme=sum(L)
n=len(L)

moy=somme/n

print(somme)
print("Moyenne =", moy)
15
Moyenne = 3.0

Exercice :

Soit T une liste d’entiers. 
Écrire un programme qui met tous les éléments pairs au début de la liste et tous les éléments impairs à la fin de la liste.

Exemple:
L = [5, 6, 9, 8, 10]
L devient :
L = [6, 8, 10, 5, 9] ou L = [8, 6, 10, 9, 5]

N.B.
    - l'ordre interne des paires ou impaires n'est pas interessant
    - Ne pas utiliser d'espaces auxiliaires (l'arrangement doit se faire inPlace)
import random
L = [random.randint(0, 20) for i in range(10)]
L
[3, 4, 3, 20, 12, 13, 2, 17, 7, 5]
# ecrire votre solution ici

gauche = 0
droite = len(L) - 1

while gauche < droite:
   
    while gauche < droite and L[gauche] % 2 == 0:
        gauche += 1
    
    while gauche < droite and L[droite] % 2 == 1:
        droite -= 1
    
    if gauche < droite:
        L[gauche], L[droite] = L[droite], L[gauche]
    
print(L)     
[2, 4, 12, 20, 3, 13, 3, 17, 7, 5]

Exercice : Écrire un programme qui décale de n positions les lettres d’une chaine de caractère ch de longueur L (on suppose que n < L).

Exemple: si ch = “Rattrapage” et n=2 alors CHD = “geRattrapa”

ch = "Rattrapage"
d = 2

CHD = ch[-d:] + ch[:-d]
print(CHD)
geRattrapa
  • Écrire un programme qui supprime les espaces (s'ils existent) au début d'une chaine de caractère passée en paramètre - Ne pas utiliser la fonction strip
# ecrire votre solution ici

ch = "           test des espaces au debut et fin     "
print(f"ch av :*{ch}*")

# completer la solution ici
# chd = ...

i = 0
while i < len(ch) and ch[i] == " ":
    i += 1

chd = ch[i:]

print(f"ch av :*{chd}*")
ch av :*           test des espaces au debut et fin     *
ch av :*test des espaces au debut et fin     *
  • Écrire un programme qui supprime les espaces (s'ils existent) à la fin d'une chaine de caractère passée en paramètre - Ne pas utiliser la fonction strip
ch = "           test des espaces au debut et fin     "
print(f"ch av :*{ch}*")

i = len(ch) - 1
while i >= 0 and ch[i] == " ":
    i -= 1

chf = ch[:i+1]

print(f"ch ap :*{chf}*")
ch av :*           test des espaces au debut et fin     *
ch ap :*           test des espaces au debut et fin*

Exercice :

- Écrire un programme qui remplace les slashes dans une chaine par des backslashes.

Exemple : - chemin = "D:/data/info/prog/python" devient - chemin = "D:\data\info\prog\python"
ch = "D:/data/info/prog/python"
print(ch)
D:/data/info/prog/python
# ecrire votre solution ici

ch = "D:/data/info/prog/python"
print(f"chemin = \"{ch}\"")

# remplacer / par \
ch = ch.replace("/", "\\")
chemin = "D:/data/info/prog/python"
print(f"chemin = \"{ch}\"")
chemin = "D:\data\info\prog\python"

    Type at least 2 letters. ↑ ↓ to move, Enter to open.