Oui c'est déclicat de manipuler des langages différents... 🥵
Mais n'oubliez pas : le pseudo code reste le même, une variable reste une variable, afficher reste afficher, un for reste un for, un while reste un while, un if un if etc. 🤗
reponse=0 bonne_reponse=33 while reponse!=bonne_reponse reponse=int(input("Dîtes "+str(bonne_reponse)+" : ")) if(reponse=bonne_reponse): println("Bravo vous avez dit"+bonne_reponse,"!") else println("Rooo perdu... Essayez encore...")
Dîtes 33 : 2 Rooo perdu... Essayez encore... Dîtes 33 : 3 Rooo perdu... Essayez encore... Dîtes 33 : 33 Bravo vous avez dit 33 !
Donne moi stp un nombre plus petit ou égal à 20 : 22 Donne moi stp un nombre plus petit ou égal à 20 : 100 Donne moi stp un nombre plus petit ou égal à 20 : 10 1...2...3...4...5...6...7...8...9...10
Votre programme devra avoir exactement, i.e. au caractère près, le même comportement (comme sur chaque exemple donné).
Un while pour la saisie du n qui convient.
Puis une fois un bon n saisi, un for pour afficher la suite attendue, i.e. une répétition de i+"..." affichés sur une ligne pour i allant de 1 à n-1.
Une liste Python 3 (type/classe List) est une structure de données permettant de stocker plusieurs éléments de manière ordonnées comme un tableau en Java à la différence que la taille de la liste est dynamique et plusieurs éléments de différents types peuvent être stockés.
liste1 = [e1, e2 , e3] crée une liste liste1 avec 3 éléments e1, e2 et e3.
len(liste1) retourne le nombre d'éléments de la liste liste1.
liste1 + liste2 retourne la liste concaténée de liste1 avec liste2. La concaténation multiple est possible aussi liste1 * n (avec n un entier)
$ python3 >>>
N'ouvrez pas plusieurs terminaux. Utiliser la navigation par onglet : ctrl+shift+t pour ouvrir un nouvel onglet dans votre terminal.
$ est le prompt du shell Linux (par ce prompt vous savez que vous êtes dans un terminal linux).
>>> est le prompt du shell Python 3 (par ce prompt vous savez que vous êtes dans un shell Python - il y a aussi un rappel de la version Python utilisée qui est affichée comme Python 2 et Python 3 ne sont pas compatibles).
>>> liste1 = [1,2,"toto",5.5] >>> type(liste1) >>> len(liste1) >>> print(liste1) >>> liste1+liste1 >>> liste1*4
Comme pour un tableau Java les éléments d'une liste Python 3 sont indicés de 0 (le premier élément) à longueur de la liste moins un. L'indice du dernier élément d'une liste liste1 est len(liste1)-1.
>>> liste1[2] >>> liste1[len(liste1)-1] >>> liste1[-1] >>> liste1[len(liste1)]
Si i est positif ou nul, liste1[i] retourne l'élément d'indice i. Si i est négatif on retourne en partant de la droite, d'où liste1[-1] retournant le dernier élément de la liste liste1, liste1[-2] retourneraient l'avant dernier.
liste1[i:j] renvoie la sous liste entre les éléments d'indice i et j-1.
liste1[i:j:k] renvoie la sous liste entre les éléments d'indice i et j-1 par pas de k.
liste1[i:] renvoie la sous liste composée des éléments de liste1 à partir de l'indice i.
liste1[:j] renvoie la sous liste composée des éléments de liste1 jusqu'à l'indice j.
liste1[::-1] permet donc de renvoyer la liste1 inversée.
>>> liste1[1] >>> liste1[1:3] >>> liste1[1:2] >>> liste1[0:4:2] >>> liste1[2:] >>> liste1[:2] >>> liste1[::-1]
Une liste est modifiable.
>>> liste1[2]=3 >>> liste1
Voici quelques méthodes supplémentaires.
liste1.append(elt) ajoute l'élément elt à la fin de la liste liste1.
liste1.pop() supprime et retourne l'élément en dernière position de la liste liste1.
liste1.insert(i,elt) insère (ajoute) l'élément elt en position i dans la liste liste1.
del liste1[i] supprime l'élément d'indice i dans la liste liste1.
liste1.remove(elt) supprime la première occurrence de l'élément elt de la liste liste1.
liste1.count(elt) compte le nombre de fois où l'élément elt est présent dans la liste liste1.
liste1.extend(liste2) concatène la liste liste2 à la fin de la liste liste1. Èquivalent donc à liste1=liste1+liste2.
>>> liste1 >>> liste1.append("truc") >>> liste1 >>> len(liste1) >>> liste1.insert(2,"abba") >>> liste1 >>> len(liste1) >>> liste1.extend([2,1,2]) >>> liste1 >>> liste1.count(2) >>> liste1.remove(2) >>> liste1 >>> liste1.pop() >>> liste1.pop() >>> liste1 >>> del liste1[2] >>> liste1
Pour parcourir une liste on peut utiliser le for comme ceci :
for elt in liste1: print(type(elt))
notes = [15,16,18,17] print(notes)
Calculez la somme des notes présentes dans la liste (avec un for).
Puis divisez cette somme par le nombre de notes (i.e. len(notes)) pour avoir la moyenne
somme = 0 for note in notes: somme = somme + note
for note in notes: note = note + 1 print(notes)
Non les éléments de la liste ne sont pas modifiés. L'instruction for note in notes: ne fait que passer une à une les valeurs des éléments (chaque valeur de note une à une).
De même si vous faîtes :
for i in range(1,4): i = i + 3 print(i)
i prendra bien successivement à chaque tour de boucle les valeurs 1 puis 2 puis 3 pour ainsi afficher :
4 5 6
C'est différent d'un for en Java comme ceci:
for (int i=1; i<4; i=i+1){ i = i + 3; System.out.println(i); }
qui affichera seulement 4 (car la condition i<4 devient fausse pour continuer la boucle).
for i in range(1,4): est une répétition en Python pour i allant de 1 à 3 inclus : on fera obligatoirement 3 tours - un tour débutant avec i vallant 1, un tour débutant avec i vallant 2 (même si au tour précédent i a été modifié), un tour débutant avec i vallant 3 (même si au tour précédent i a été modifié). En Java, for (int i=1; i<4; i=i+1) est une boucle tant que (tant que i<4 on reste dans la boucle).
for i in range(0,len(notes)): notes[i] = notes[i] + 1 print(notes)
Oui 😎😁
Combien de nombres entiers voulez-vous saisir ? 5 l[0] = 2 l[1] = -3 l[2] = 5 l[3] = 6 l[4] = 3 Fin de remplissage de la liste. Voici la liste remplie : [2, -3, 5, 6, 3]
Votre programme doit avoir strictement ce même comportement.
L'idée est comme vous allez utiliser la méthode append, vous pouvez initialiser une liste l vide (l=[]) puis vous ajoutez chaque élément avec l.append(elt à ajouter à la fin de la liste).
Pensez à la concaténation multiple : l=[0]*n
Quel entier voulez-vous ajouter à la liste (appuyer juste sur entrée pour finir) ? 4 Quel entier voulez-vous ajouter à la liste (appuyer juste sur entrée pour finir) ? 23 Quel entier voulez-vous ajouter à la liste (appuyer juste sur entrée pour finir) ? -2 Quel entier voulez-vous ajouter à la liste (appuyer juste sur entrée pour finir) ? Fin de remplissage de la liste. Voici la liste remplie : [4, 23, -2]
question = "Quel entier voulez-vous ajouter à la liste (appuyer juste sur entrée pour finir) ? "
question = "Quel entier voulez-vous ajouter à la liste " question = question + "(appuyer juste sur entrée pour finir) ? "
question = "Quel entier voulez-vous ajouter à la liste " question += "(appuyer juste sur entrée pour finir) ? "
En résumé :
Idem pour une opération entre nombres (entiers ou réels), par exemple :
>>>s = input() >>> s ''
question = "Quel entier voulez-vous ajouter à la liste " question += "(appuyer juste sur entrée pour finir) ? " s = input(question) l=[] while s != "": l.append(int(s)) s = input(question)
Client suivant ? (o/n) : o ===> Combien d'H3 ? 2 ===> Combien d'A8 ? 2 ===> Combien d'H2 ? 2 Client suivant ? (o/n) : o ===> Combien d'H3 ? 12 ===> Combien d'A8 ? 8 ===> Combien d'H2 ? 8 Client suivant ? (o/n) : o ===> Combien d'H3 ? 0 ===> Combien d'A8 ? 2 ===> Combien d'H2 ? 0 Client suivant ? (o/n) : n Voici les ventes du jour : [[2, 2, 2], [12, 8, 8], [0, 2, 0]]
ventes = [] s=input("Client suivant ? (o/n) : ") while s=="o": l=[0]*3 l[0]=int(input("===> Combien d'H3 ? ")) l[1]=int(input("===> Combien d'A8 ? ")) l[2]=int(input("===> Combien d'H2 ? ")) ventes.append(l) s=input("Client suivant ? (o/n) : ") print("Voici les ventes du jour :",ventes)
Pour sauvegarder des informations entre plusieurs lancements d'un programme vous pouvez sauvegarder des informations dans des fichiers. La manipulation de fichiers est très utile.
En Python 3, pour manipuler un fichier on utilise la fonction open qui prend deux paramètres : le nom du fichier et le mode qui peut valloir :
En outre, vous pouvez préciser si le fichier doit être traité en mode texte ("t" - valeur par défaut) ou binaire ("b").
Vous pouvez alors utiliser les méthodes suivantes :
Vous pouvez supprimer un fichier en utilisant le module os et la méthode remove comme ceci :
(au cas où : os pour operating system - système d'exploitation en français)import os os.remove("nomfichier.txt")
Enfin vous pouvez parcourir ligne par ligne un fichier avec un for comme ceci :
f = open("nomfichier.txt") for ligne in f: print(ligne) #ligne est une chaîne
# ouverture du fichier texte test.txt en écriture (écrasante) # si le fichier n'existe pas il est créé automatiquement f = open("test.txt","w") # par défaut en mode texte aussi ("wt") f.write("blabla1") f.write("blabla2") liste = ["blabla3","blabla4","blabla5"] f.writelines(liste) # ajout des éléments de la liste liste f.close() # fermeture du fichier # ouverture du fichier test.txt en lecture # pour vérifier ce qu'il y a dedans # (vous pouviez aussi bien sûr l'ouvrir # avec un éditeur comme sublime text par exemple) f = open("test.txt") # par défaut ("rt") print(f.read())
blabla1 blabla2 blabla3 blabla4 blabla5
"\n" est le caractère retour à la ligne.
Chez Hercule & co, on souhaite sauvegarder dans un fichier ventes.txt toutes les ventes journalières. Chaque vente d'une journée est toujours sauvegardée dans une liste comme décrit précédemment.
[[1, 2, 3], [2, 0, 1], [0, 0, 1]] [[2, 2, 0]] [[1, 2, 0], [12, 23, 24]]
On voudrait maintenant être capable chez Hercule & co de faire une synthèse sur les ventes.
Le fichier ventes comporte 3 jours de ventes. Voici le nombre de clients par jour : [3, 1, 2] Voici le nombre total de ventes par jour : [10, 4, 62] Total de ventes d'H3 : 18 Total de ventes d'A8 : 29 Total de ventes d'H2 : 29
Une fois le fichier ouvert en lecture, f.readlines() retourne une liste contenant toutes les lignes du fichier.
Testez dans le shell Python 3 (son grand intérêt est justement de pouvoir tester rapidement quelques instructions) :
>>> f=open("ventes.txt") >>> f.readlines() >>> f.readlines()
Il faut donc faire attention au fait que f.readlines() retourne une liste contenant toutes les lignes du fichier au premier appel, et si vous rappelez une deuxième fois f.readlines() vous aurez une liste vide. Il faut donc sauvegarder le résultat de f.readlines() dans une variable pour s'en servir plusieurs fois dans un programme.
Testez maintenant dans le shell Python 3 :
>>> f=open("ventes.txt") >>> len(f.readlines())
Le nombre d'éléments de cette liste est le nombre de ligne du fichier qui correspond au nombre de jours de ventes dans le fichier. Aussi votre programme herculeventes.py peut commencer par :
f=open("ventes.txt") ventes=f.readlines() print("Le fichier de ventes comporte",len(ventes),"jours de ventes.")
Testez ce programme faisant une première partie du travail à faire.
Il existe de nombreuses manières de réaliser un tel programme, on vous propose dans la suite une version utilisant uniquement des concepts "de base de la programmation" ainsi qu'une démarche de recherche de la solution.
Testez dans le shell Python 3 :
>>> f=open("ventes.txt") >>> ventes=f.readlines() >>> ventes[0] '[[1, 2, 3], [2, 0, 1], [0, 0, 1]]\n' >>> ventes[1] '[[2, 2, 0]]\n' >>> ventes[2] '[[1, 2, 0], [12, 23, 24]]\n'
Avec le fichier de ventes donné en exemple, on a 3 éléments à la liste ventes (les 3 lignes du fichier). Les trois lignes ventes[0], ventes[1] et ventes[2] sont des chaînes de caractères. Il va falloir voir comment aller chercher les valeurs numériques. Pour ce faire, dans les méthodes de manipulation de chaînes de caractères (cf https://www.w3schools.com/python/python_strings.asp) il existe une méthode replace permettant de remplacer chaque occurences d'une chaîne par une autre :
Testez dans le shell Python 3 :
>>> "toto".replace("o","a") >>> "toto".replace("o","")
La première instruction ci-dessus retourne "tata" car les "o" sont remplacés par des "a", alors que la deuxième retourne "tt" car les "o" sont remplacés cette fois par des chaînes vides "", autrement dit les "o" sont enlevés.
Pour récupérer les valeurs numériques présentent dans les chaînes ventes[i] i allant de 0 à len(ventes), il suffit donc d'enlever tous les caractères qui ne sont pas des nombres :
>>> ventes[0].replace("[[","") >>> ventes[0].replace("[[","").replace("[","") >>> ventes[0].replace("[[","").replace("[","").replace("]","") >>> ventes[0].replace("[[","").replace("[","").replace("]","").replace("]]","")
>>> s=ventes[0].replace("[[","").replace("[","") >>> s=s.replace("]","").replace("]]","") >>> s=s.replace(",","").replace("\n","") >>> s '1 2 3 2 0 1 0 0 1'
>>> "toto".split("o") >>> "abc".split("b") >>> "a b c".split(" ") >>> "a b c".split() >>> "a,b,c".split(",")
>>> s.split(" ") ['1', '2', '3', '2', '0', '1', '0', '0', '1']
Pour résoudre le problème, ce qui nous intéresse maintenant à chaque ligne, i.e. pour chaque jour, c'est :
>>>l=s.split() >>>len(s.split(" "))//3
>>> somme=0 >>> for chaine in l: ... somme = somme + int(chaine) # n'oubliez pas 4 espaces pour l'indentation ... # on appuie directement sur entrée pour finir le for >>> somme 10
En bonus, on peut faire cela en une ligne en Python grâce à des expressions qui sortent du cadre de ce module M1207 consacré uniquement aux bases. Juste pour info donc mais pour vous montrer pourquoi Python est populaire et intéressant pour des scripts "visuellement épurés" :
>>> sum(int(chaine) for chaine in l) 10
Vous pouvez réaliser maintenant votre programme.
Vous aurez besoin de 5 variables supplémentaires :
Il faudra alors ensuite remplir correctement ces variables en parcourant jour à par jour la liste ventes (comme dit plus haut parcourir une à une les chaînes ventes[i] pour i allant de 0 à len(ventes). Puis vous pourez afficher les résultats.
f=open("ventes.txt") ventes=f.readlines() print("Le fichier ventes comporte",len(ventes),"jours de ventes.") h3=0 # Total de ventes d'H3 a8=0 # Total de ventes d'A8 h2=0 # Total de ventes d'H2 nbclients=[] # Nombre de clients pour chaque jour nbventes=[] # Nombre de ventes pour chaque jour for i in range(0,len(ventes)): # ventes[i] = ventes du jour i+1 # PARTIE À COMPLÉTER dans le for # Obtenir l la liste contenant les valeurs numériques des ventes (sous forme de chaînes) # Comme sur vos tests dans le shell python3 # Une fois l obtenues # Ajouter à nbclients le ombre de clients pour ce jour # Parcourir la liste élément par élément # for j in range(0,len(l)): # pour calculer h3, a8, h2 et le nombre total d'articles # vendus ce jour (pour l'ajouter après ce for à nbventes) print("Voici le nombre de clients par jour :",nbclients) print("Voici le nombre total de ventes par jour :",nbventes) print("Total de ventes d'H3 :",h3) print("Total de ventes d'A8 :",a8) print("Total de ventes d'H2 :",h2)
f=open("ventes.txt") ventes=f.readlines() print("Le fichier ventes comporte",len(ventes),"jours de ventes.") h3=0 # Total de ventes d'H3 a8=0 # Total de ventes d'A8 h2=0 # Total de ventes d'H2 nbclients=[] # Nombre de clients pour chaque jour nbventes=[] # Nombre de ventes pour chaque jour for i in range(0,len(ventes)): # ventes[i] = ventes du jour i+1 s=ventes[i].replace("[[","").replace("[","") s=s.replace("]","").replace("]]","") s=s.replace(",","").replace("\n","") l=s.split() # liste contenant les valeurs numériques des ventes (sous forme de chaînes) nbclients.append(len(l)//3) # Nombre de clients pour ce jour i+1 somme=0 for j in range(0,len(l)): somme += int(l[j]) if j%3==0: h3 += int(l[j]) elif j%3==1: a8 += int(l[j]) else: h2 += int(l[j]) nbventes.append(somme) # Nombre d'articles vendus pour le jour i+1 print("Voici le nombre de clients par jour :",nbclients) print("Voici le nombre total de ventes par jour :",nbventes) print("Total de ventes d'H3 :",h3) print("Total de ventes d'A8 :",a8) print("Total de ventes d'H2 :",h2)
Une fois tous les exercices finis, faire valider vos validations par l'enseignant.
Finished! Hurrah! 🤟⚡️Si vous avez fini avant la fin, aidez les autres à finir aussi :-) N'oubliez pas de déposer l'archive de vos programmes et de faire votre mémento (écrire dans une note synthèse l'ensemble des mots clés importants à retenir pour écrire vos programmes).