Journal d'un Terrien

Web log de Serge Boisse

On line depuis 1992 !

Publicité
Si cette page vous a plu, Copiez son adresse et partagez-la !
http://sboisse.free.fr/programmation/languages/Python.php
Savez-vous quels sont les articles les plus vendus sur Amazon.fr ?
Python

Python

Pasted image 20250220112310.png Le langage à la mode des années 2010-2020...

Environnement de programmation

mon environnement Jupyterlab

Avec Anaconda Navigator on peut lancer Jupyter notebook et jupyterLab. Dans ce dernier cas les notebooks se lancent dans le navigateur et se connectent à un serveur web local

JupyterLab :

JL.png

Sur le PC de Françoise (Omen) mes notebooks sont dans Jupyter (Répertoire sur D)(lien privé) Et il n'y a pas Anaconda. On le lance donc avec un shell (powershell) et
jupyter lab --notebook-dir=D:/outils/jupyter

Ou alors avec l'IDE Pycharm

Notons que ces notebooks utilisent du markdown et qu'il possible d'exporter un notebook en .md ou en .pdf ! exemple en .md : Logique_pondérée OK pour les dataframes, Mais les graphes ne s'affichent pas...

markdown dans jupyter lab

raccourcis claviers jupyter

  • shift-enter : run cell

autres environnement

Apprendre python

Exemple

# latest_tutorial.py

import time
from reader import feed

def main():
    """Print the latest tutorial from Real Python"""
    tic = time.perf_counter()
    tutorial = feed.get_article(0)
    toc = time.perf_counter()
    print(f"Downloaded the tutorial in {toc - tic:0.4f} seconds")

    print(tutorial)

if __name__ == "__main__":
    main()

Ne marche pas dans Obsidian, reader inconnu. En fait il faut installer le package avec pip.... et même ainsi reader.feed est inconnu ?

Remarque : dans la ligne print(f"...), le f" précédant la chaîne indique qu'il s'agit d'une f_string, qui est un moyen pratique de formater une chaîne de texte. :0.4f est un spécificateur de format qui indique que le nombre, toc - tic, doit être imprimé comme un nombre décimal avec quatre décimales.

Autres astuces ou différences avec javascript

fonctions

  • Les fonctions peuvent retourner plusieurs valeurs en même temps :
    w, v = np.linalg.eig(matrice)
  • division entière : print(6//5) # 1

main

import sys
def hello(name) :
	print("hello '",name,"'")
	
def main() :
	hello(sys.argv[0]) ## vide !

if __name__ == '__main__' :
	main()

if

la syntaxe if ... : est différente de java ou javascript, de plus on a les mots clef and et or (pas de && ou de ||) :

if time_hour >= 0 and time_hour <= 24:
	print('Suggesting a drink option...')
	if mood == 'sleepy' and time_hour < 10:
		print('coffee')
	elif mood == 'thirsty' or time_hour < 2:
	     print('lemonade')
	else: 
		print('water')

chaînes

  • chaînes multi lignes entre triples doubles quotes """ :
multi = """It was the best of times.  
  It was the worst of times."""
print(multi)
# It was the best of times.  
#   It was the worst of times.  
  • botte_de_foin.find(aiguille) est l'équivalent de indexOf on javascript
  • les tranches de chaines :
s = "hello" # 1er index = 0
# s[1:4] est "ell"
# s[1:] correspond à "ello"
# s[:] est 'Hello'' : copie de chaine
# s[1:100] correspond à "ello". Un index trop grand est tronqué

f strings

address_book = [{'name':'N.X.', 'addr':'15 Jones St', 'bonus': 70},
 {'name':'J.P.', 'addr':'1005 5th St', 'bonus': 400},
 {'name':'A.A.', 'addr':'200001 Bdwy', 'bonus': 5},]

for person in address_book:
	print(f'{person["name"]:8} || {person["addr"]:20} || {person["bonus"]:>5}')

# N.X. || 15 Jones St || 70 
# J.P.  || 1005 5th St ||  400
# A.A.  || 200001 Bdwy ||  5

unicode strings

Les chaînes Python standards sont en Unicode.

ustring = 'A unicode \u018e string \xf1'
b = ustring.encode('utf-8')
print(b)
b'A unicode \xc6\x8e string \xc3\xb1' ## bytes of utf-8 encoding. Note the b-prefix.  
t = b.decode('utf-8') ## Convert bytes back to a unicode string  
print(t == ustring) ## It's the same as the original, yay!  

#True

tuples

c'est une collection entre parenthèses

t = ("coucou","serge","françoise")
print(t)

dictionnaires

entre {} au lieu de [] pour les arrays.

d = {}
d["a"]= "alpha"
d["b"]= "beta"
d["o"]= "omega"
print(d["a"]) ## alpha
"a" in d ## True
print(d.keys())
print(d.values())
for k in sorted(d.keys()) :
	print('key:', k, '-->', d[k])
print(d.items()) # rend une liste de tuples de taille 2

Python dans Obsidian

Avec le plugin obsidian-execute-code il est possible d'exécuter du python.

Tracé de courbes

cf https://courspython.com/introduction-courbes.html
C'est très proche de MATLAB
Dans Obsidian on aussi Desmos

@python plot (clause SAT)
@python plot (clause SAT)
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 300)
# créneau (variable)
def cr(n,x):
	return np.mod(np.floor(x*2**n),2)
# littéraux
def li(n,x):
	if n>0:
		return cr(n,x)>0
	return (1-cr(-n,x))>0
# clause
def cl(a,b,c,x):
	return li(a,x)|li(b,x)|li(c,x)

plt.figure(figsize=(8,2)) #inches

#plt.plot(x,li(2,x))
#plt.plot(x,cl(2,3,-4,x))
plt.plot(x, cl(1,-2,-3,x)&cl(-1,-2,4,x)&cl(2,3,-4,x)&cl(-1,2,4,x))
plt.show()

intéressant

plt.figure(figsize=(8,2)) #inches
plt.plot(x, cl(1,-2,-3,x))
plt.show()

Autre exemple : remarquez la légende en Latex

import matplotlib.pyplot as plt
from math import *

start = 0
end = 15
nb_points = 100
pas = (end - start)/(nb_points - 1)
X = [start + i * pas for i in range(nb_points)]
Y1 = [sin(i) for i in X]
Y2 = [cos(i) for i in X]
Y3 = [i**2/100 for i in X]

plt.plot(X, Y1, lw = 3, ls = ":", c = 'green', label='Sin')
plt.plot(X, Y2,lw = 3, ls = "--", c = "red", label ="Cos")
plt.plot(X, Y3, label="$x^2/100$")
plt.grid(visible=True)
plt.xlabel("position X")
plt.ylabel("valeur Y")
plt.title("exemple")
plt.legend()
plt.show()

Des exemples de programmes et des tutos

matrices et python

import numpy as np
M = np.array([[1, 1, 1 ,0],[-1,1,0,1],[0,1,1,-1],[-1,-1,0,1],[-1,0,-1,-1]])
#print(f"M :\n{M}") 
print("M :\n",M)
Mt = M.T
print("M x Mt :")
MMt = M.dot(Mt)
print(MMt)
det = np.linalg.det(MMt)
print(f"det = {int(det)}")
MtM = Mt.dot(M)
print("Mt x M :")
print(MtM)
det = np.linalg.det(MtM)
print(f"det = {int(det)}")

machine learning (IA)

Cette video Youtube (en anglais) montre comment créer en python un modèle de machine learning pour prédire le cours futur de la bourse. ! (n'esssayez pas avec du vrai argent, vous risquez de le perdre)

Super!

La suite...

Publicité
Commentaires

Commentaires (0) :

Page :



Ajouter un commentaire (pas besoin de s'enregistrer)

Pseudo :
Message :


image de protection
En cliquant sur le bouton "Envoyer" vous acceptez les conditions suivantes : Ne pas poster de message injurieux, obscène ou contraire à la loi, ni de liens vers de tels sites. Respecter la "netiquette", ne pas usurper le pseudo d'une autre personne, respecter les posts faits par les autres. L'auteur du site se réserve le droit de supprimer un ou plusieurs posts à tout moment. Merci !
Ah oui : le bbcode et le html genre <br>, <a href=...>, <b>b etc. ne fonctionnent pas dans les commentaires. C'est voulu.
< Retour en haut de la page