#Exemple 1

import numpy as np #Import de la bibliotheque numpy sous l'alias np. Chaque fonction de numpy doit être préfixée par np.
L = [1, 5, 3]
T = np.array(L) #conversion d'une liste en ndarray
T = np.log(T) #applique la fonction logarithme sur *chaque* nombre dans T
T = T + 2 #ajoute 2 à chaque nombre de T
print(T)


#Exemple 2

from math import *
import matplotlib.pyplot as plt   #import des fonctions d'affichage
def f(x):
    return exp(-x**2)

X = [] #Initialisation de la liste des abscisses
Y = [] #Initialisation de la liste des ordonnées
n = 100000 #Nombre de points utilisés dans le tracé
a = -10
b = 10
for i in range(n):
    x = a + i*(b-a)/n   #Calcul de l'abscisse pour un point
    X.append(x)         #Ajout de cette abscisse dans X
    Y.append(f(x))      #Ajout de l'ordonnée correspondante dans Y
plt.plot(X,Y)         #plot prend en entrée les liste d'abscisses et d'ordonnées, et trace la courbe
plt.show()            #show affiche le resultat

#Exemple 3
X = np.linspace(-10,10,100000) #crée un ndarray contenant 100000 valeurs régulièrement espacées de -10 à 10
Y = np.exp(-X**2/2)/sqrt(2*pi) #np.exp peut s'appliquer sur les ndarray, contrairement à la version de la bibliothèque math
plt.plot(X, Y, "-b") #Le - dans le troisième argument précise la façon d'afficher les points : - les relie par un trait, on utiliserait x par exemple pour tracer chaque point comme une croix. La lettre b précise que la couleur de la courbe est le bleu (black pour noir, r pour rouge, g pour vert)
plt.title("Fonction gaussienne de paramètre 1") #permet de donner un titre à la fenêtre affichée
plt.show()


#Exemple 4
F = open('notes.txt','r',encoding="utf8") #ouvre le fichier "notes.txt" dans la variable Python F. 'r' indique que le fichier est ouvert en lecture (read), on ne va pas le modifier

L1 = []
L2 = []
somme = 0

ligne_0 = F.readline() #readline renvoie la première ligne non encore lue du fichier F, sous forme de chaîne de caractères. Ici on ne va rien faire de ligne_0, on veut juste lire la suite

lignes = F.readlines() #readlines renvoie la liste des lignes non encore lues, sous forme de liste de chaînes de caractères.

for ligne in lignes: #on parcourt chaque ligne de la liste des lignes
    ligne = ligne.strip() #nettoie la ligne en supprimant les caractères spéciaux, comme le retour à la ligne final
    nom, prenom, note = ligne.split(';') #décompose la ligne en ses trois composantes, en utilisant le point-virgule comme séparateur
    note = float(note) #la fonction float traduit une chaîne de caractère en nombre
    somme += note
    if note >= 10:
        L1.append((nom, prenom, note))
    else:
        L2.append((nom, prenom, note))

def afficher_liste(L): #Fonction auxiliaire pour afficher les listes créées
    for nom, prenom, note in L:
        print(nom, prenom, note)

print("moyenne de la classe : ", somme/len(lignes))

print("\nElèves ayant au moins 10 :") #\n provoque un retour à la ligne
afficher_liste(L1)
print("\nElèves ayant moins de 10 :")
afficher_liste(L2)

F.close() #le fichier doit être refermé après avoir été utilisé

#Exemple 5
from math import *
F = open('hello world.txt','w') #Crée le fichier "hello world.txt" s'il n'existe pas déjà, et l'ouvre en écriture dans la variable Python F
F.write("Hello world!\n") #Ecrit "hello world!" dans le fichier F, suivi d'un retour à la ligne
F.write("la valeur de pi en Python est ")
F.write(str(pi)) #str permet de transformer un nombre en chaîne de caractères
F.close()