Module Python01 -
Seminar
1 Object-oriented programming (Demo du matin)
cf: programmation-procedurale_vs_orientee-objet_v0.[Link]
1.1 Everything is Object
print(type(100))
print(type(99))
100 et 99 appartiennent à la même famille que l'on appelle class des int
print(type('Hello world'))
print(type([1,2,3]))
Nous allons donc définir une classe Student
attribut: name, age, etc
*dir() essaye de donner une liste d’attributs valides pour cet objet.
1.2 Encapsulation:
"private attribut"
1.3 Héritage:
"Method Overriding"
1.4 Polymorphisme:
1.5 Points clés à retenir:
La programmation orientée objet rend le programme facile à comprendre et efficace.
Puisque la classe est partageable, le code peut être réutilisé.
Les données sont sûres et sécurisées grâce à l'abstraction des données.
Le polymorphisme permet la même interface pour différents objets, de sorte que les programmeurs
peuvent écrire du code efficace.
2 IO (Demo du matin)
Les fichiers sont des emplacements nommés sur le disque pour stocker les informations associées. Ils sont
utilisés pour stocker en permanence des données dans une mémoire non volatile (par exemple un disque
dur).
Étant donné que la mémoire vive (RAM) est volatile (qui perd ses données lorsque l'ordinateur est éteint),
nous utilisons des fichiers pour une utilisation future des données en les stockant de manière permanente.
Lorsque nous voulons lire ou écrire dans un fichier, nous devons d'abord l'ouvrir. Lorsque nous avons
terminé, il doit être fermé pour que les ressources liées au fichier soient libérées.
Par conséquent, en Python, une opération de fichier a lieu dans l'ordre suivant:
1. Ouvrir un fichier
2. Lire ou écrire (effectuer une opération)
3. Fermez le dossier
Préparer un fichier txt, par exemple "[Link]" et écrivez quelques ligne
file = open('[Link]') #par défaut en mode lecture
print ([Link]())
[Link]() # très important, ne pas oubliez
Un moyen plus sûr est d'utiliser un bloc try ... finally.
try:
f = open("[Link]", encoding = 'utf-8')
# perform file operations
finally:
[Link]()
De cette façon, nous garantissons que le fichier est correctement fermé même si une exception est
déclenchée qui provoque l'arrêt du flux du programme.
La meilleure façon de fermer un fichier consiste à utiliser l'instruction with . Cela garantit que le fichier
est fermé lorsque le bloc à l'intérieur de l'instruction with est quitté.
Nous n'avons pas besoin d'appeler explicitement la méthode close () . Cela se fait en interne.
with open("[Link]", encoding = 'utf-8') as f:
# perform file operations
Mode Description
r Opens a file for reading. (default)
w Opens a file for writing. Creates a new file if it does not exist or truncates the file if it exists.
x Opens a file for exclusive creation. If the file already exists, the operation fails.
Opens a file for appending at the end of the file without truncating it. Creates a new file if it
a
does not exist.
t Opens in text mode. (default)
b Opens in binary mode.
+ Opens a file for updating (reading and writing)
Method Description
close() Closes an opened file. It has no effect if the file is already closed.
Reads at most n characters from the file. Reads till end of file if it is negative or
read(n)
None .
readline() Reads and returns one line from the file. Reads in at most n bytes if specified.
Reads and returns a list of lines from the file. Reads in at most n bytes/characters if
readlines()
specified.
write(s) Writes the string s to the file and returns the number of characters written.
writelines(lines) Writes a list of lines to the file.
Exemples:
1. copy images
src_file = open('[Link]', 'rb')
target_file = open('[Link]', 'wb')
target_file.write(src_file.read())
src_file.close()
target_file.close()
3 Python Exercices
3.1 Étant donné deux nombres entiers retournent leur produit et si le produit
est supérieur à 1000, renvoie leur somme. Dans le premier block, vous trouver
deux exemples des entrées et ses résultat attendus. Veuillez compléter le code
proposé et testez le résultat dans Jupyter-Noteboook.
Given 01:
number1 = 20
number2 = 30
Expected Output 01:
The result is 600
Given 02:
number1 = 40
number2 = 30
Expected Output 02:
The result is 70
def multiplication_or_sum(num1, num2):
/*complétez*/
number1 = 20
number2 = 30
print("\n")
result = multiplication_or_sum(number1, number2)
print("The result is", result)
3.2 Imprimer la table de multiplication des formulaires 1 à 10. Dans le premier
block, vous trouver un exemple de résultat attendu. Veuillez compléter le code
proposé et testez le résultat dans Jupyter-Noteboook.
Expected Output 01:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
for i in range(1, 11):
for j in range(1, 11):
print(/*complétez*/)
print("\t\t")
3.3 Étant donné une chaîne, n'affichez que les caractères qui sont présents à un
numéro d'index pair. Dans le premier block, vous trouver un exemple de
résultat attendu. Veuillez compléter le code proposé et testez le résultat dans
Jupyter-Noteboook.
Expected Output 01:
Orginal String is applepie
Printing only even index chars
a
p
e
i
def printEveIndexChar(str):
for i in range(/*complétez*/):
print("index[",i,"]", str[i] )
inputStr = "applepie"
print("Orginal String is ", inputStr)
print("Printing only even index chars")
printEveIndexChar(inputStr)
3.4 Renvoie le nombre total de sous-chaîne "un" qui apparaît dans la chaîne
donnée. Veuillez compléter le code proposé et testez le résultat dans Jupyter-
Noteboook.
Given string is “Lorsque j’avais six ans j’ai vu, une fois, une magnifique image,
dans un livre sur la Forêt Vierge qui s’appelait « Histoires Vécues ». Ça
représentait un serpent boa qui avalait un fauve. Voilà la copie du dessin.”
Expected Output 01:
un appeared 2 times
def count_emma(statement):
print("Given String: ", statement)
count = 0
for i in /*complétez*/:
count += statement[i: i + 2] == 'un'
return count
count = count_emma("Lorsque j’avais six ans j’ai vu, une fois, une magnifique
image, dans un livre sur la Forêt Vierge qui s’appelait « Histoires Vécues ». Ça
représentait un serpent boa qui avalait un fauve. Voilà la copie du dessin.")
print("un appeared ", count, "times")
3.5 Inverser un nombre donné et renvoyer vrai s'il est le même que le nombre
d'origine. Dans le premier block, vous trouver deux exemples des entrées et
ses résultat attendus. Veuillez compléter le code proposé et testez le résultat
dans Jupyter-Noteboook.
Given 01:
original number 121
Expected Output 01:
The original and reverse number is the same
Given 02:
original number 125
Expected Output 02:
The original and reverse number is not same
def reverseCheck(number):
print("original number", number)
/*complétez*/
if (originalNum == reverseNum):
return True
else:
return False
print("The original and reverse number is the same:", reverseCheck(121))
3.6 Calculez l'impôt sur le revenu pour le revenu donné en respectant les règles
ci-dessous. Veuillez compléter le code proposé et testez le résultat dans
Jupyter-Noteboook.
Given 01:
Taxable Income Rate (%)
First $10,000 0
Next $10,000 10
The remaining 20
Expected Output 01:
For example, suppose that the taxable income is $45000 the income tax payable is
$10000*0% + $10000*10% + $25000*20% = $6000.
income = 45000
taxPayable = 0
print("Given income", income)
/*complétez*/
print("Total tax to pay is", taxPayable)
3.7 Ecrivez une fonction appelée exponent (base, exp) qui renvoie une valeur
int de base augmente à la puissance de exp. Veuillez compléter le code proposé
et testez le résultat dans Jupyter-Noteboook.
Expected Output:
Case 1:
base = 2
exponent = 5
2 raises to the power of 5 is: 32 i.e. (2 *2 * 2 *2 *2 = 32)
Case 2:
base = 5
exponent = 4
5 raises to the power of 4 is: 625 i.e. (5 *5 * 5 *5 = 625)
def exponent(base, exp):
num = exp
result = 1
while num > 0:
/*complétez*/
print(base, "raises to the power of", exp, "is: ", result)
exponent(5, 4)
4 Project for fun: a student management system
Voici un bout de code simulant un système de gestion des élèves que l'on peut créer, supprimer, modifier,
afficher et faire des requêtes,etc. la seule fonctionnalité correctement implémenté pour le moment est
l'insertion.
# project: a student management system
import os
filename = '[Link]'
def menum():
print("Welcome to EME Data Student management system")
print("----------------------------menu options----------------------------")
print("\t\t1. Insert Student Infomation")
print("\t\t2. Find Student Infomation by Name")
print("\t\t3. Delete Student Infomation")
print("\t\t4. Modify Student Infomation")
print("\t\t5. Sort Student Infomation")
print("\t\t6. Display all Student Infomation")
print("\t\t0. Exit")
print("---------------------------------------------------------------------")
def main():
while True:
menum()
choice = int(input('Please select...'))
if choice in [0,1,2,3,4,5,6,7]:
if choice == 0:
answer = input('Are you sur you want to quit y/n')
if answer =='y' or answer == 'Y':
print('thanks for using')
break
else:
continue
elif choice == 1:
insert()
elif choice == 2:
search()
elif choice == 3:
delete()
elif choice == 4:
modify()
elif choice == 5:
sort()
elif choice == 6:
display()
def insert():
student_list = []
while True:
id = input('please enter student id(ex:1001, 1002)')
if not id:
break
name = input('please enter student name')
if not name:
break
try:
english_score= int(input('please enter english score'))
python_score= int(input('please enter python score'))
maths_score= int(input('please enter maths score'))
except:
print('invalid input')
continue
#create a student object with the previous input
student = {'id':id, 'name':name, 'english_score':english_score,
'python_score':python_score, 'maths_score':maths_score}
#add student info into students list
student_list.append(student)
answer = input('continue to insert? y/n')
if answer =='y':
continue
else:
break
# save into a file
save(student_list)
print('students saved successfully')
def save(lst):
try:
stu_txt = open(filename, 'a',encoding='utf-8')
except:
stu_txt = open(filename, 'w',encoding='utf-8')
for item in lst:
stu_txt.write(str(item)+'\n')
stu_txt.close()
def delete():
pass
def modify():
pass
def sort():
pass
def display():
pass
def search():
pass
if __name__ == '__main__':
main()
Ensuite, vous avez une implémentation de delete mais elle est incomplète.
def delete():
while True:
student_id=input("Please enter the student id tou want to delete")
if #1:
if [Link](filename):
with open(filename, 'r', encoding='utf-8') as file:
student_old = #2
else:
student_old=[]
flagDeletion = False
if #3:
with open(filename, 'w', encoding='utf-8') as wfile:
d={}
for item in #4:
d= dict(eval(item)) # transform string to dict
if (#5):
[Link](str(d)+'\n')
else:
flagDeletion = #6
if flagDeletion:
print(f"student with id = {student_id} has been deleted")
else:
print(f"Not found the student with id = {student_id}")
else:
print("No student info")
break
answer = input("continue to delete?y/n")
if answer == 'y':
continue
else:
break
TO DO:
1. Exécutez le code et essayez de comprendre la logique.
2. Insérer quelques élèves. Vous devez donc voir apparaitre un fichier txt '[Link]' dans le même
répertoire que votre code. Pensez à faire une copie de ce fichier, une fois il est correctement généré.
Vous allez comprendre pouquoi :)
3. Complétez l'implémentation de delete() et copiez la dans le premier bloc de code et exécutez
4. Réalisez au mieux le reste des fonctionnalités. Si votre code fonctionne dans les cas courants(sauf cas
extreme), on jugera que vous aurez réussi. Mais essaie quand même de faire cet exercice de penser au
maximum les effets de bord.