Edu python – Tutorial pour apprendre le Python

Edu python tutorial pour apprendre le python : En python tout est objet. Un objet est un morceau de code qui est caractérisé par :Des données, des Méthodes : Ce sont des mécanismes pour manipuler les données.

Edu python

Introduction Edupython

Création de l’objet

Un objet de type chaine de caractère est créé dans l’espace des objets via le caractère  » ou ‘.

Les appels de méthode se font via un point :

'hello'.upper()

Un nom de variable permet de stocker une référence à l’objet :

compteur = 1

La variable qui s’appelle compteur référence l’objet 1

En python le nom de variable contient des lettres et des chiffres mais ne peut commencer par un chiffre. Une bonne pratique est de donner un bon nom de variable.

Exemple :

ma_variable = 5

Déréférencement :

ma_variable = 'HELLO'

Python est langage à typage fort, le type est lié à l’objet et non à la variable.

del ma_variable

La commande del supprime la variable de l’espace des variables. Si l’objet n’a plus de référence un mécanisme de libération de la mémoire s’active : le garbage collector.

Edu python – Liens internes :

http://128mots.com/index.php/category/python/

http://128mots.com/index.php/2021/01/19/levenshtein-python/

edu python – Liens externes :

https://www.python.org/

https://openclassrooms.com/fr/courses/4262331-demarrez-votre-projet-avec-python

Exemple d’alorithme python :

Voici l’implémentation en python de l’algorithme de Wagner & Fischer (Wagner-Fischer). Il permet de calculer la distance de Levenshtein (distance entre deux chaines de caractères).

Premièrement le but de l’algorithme est de trouver le coût minimal. Coût minimal pour transformer une chaîne en une autre. Alors une fonction récursive permet de retourner le nombre minimal de transformation. Et pour transformer une sous-chaine de A avec n caractères en une sous-chaine de B avec le même nombre de caractères. La solution est donnée. Il faut calculer la distance entre les 2 lettres à la même position dans la chaine A et B. Alors Soit les lettres et la lettre précédentes sont identiques. Soit il y a une différence et dans ce cas on calcule 3 côuts. Alors le premier est de supprimer une lettre le la chaine A. Et d’insérer une lettre dans la chaine A pour substituer une lettre de la chaine A. Alors On peut alors trouver le cout minimal.

import numpy as np
def levenshtein(chaine1, chaine2):
    taille_chaine1 = len(chaine1) + 1
    taille_chaine2 = len(chaine2) + 1
    levenshtein_matrix = np.zeros ((taille_chaine1, taille_chaine2))
    for x in range(taille_chaine1):
        levenshtein_matrix [x, 0] = x
    for y in range(taille_chaine2):
        levenshtein_matrix [0, y] = y
    for x in range(1, taille_chaine1):
        for y in range(1, taille_chaine2):
            if chaine1[x-1] == chaine2[y-1]:
                levenshtein_matrix [x,y] = min(
                    levenshtein_matrix[x-1, y] + 1,
                    levenshtein_matrix[x-1, y-1],
                    levenshtein_matrix[x, y-1] + 1
                )
            else:
                levenshtein_matrix [x,y] = min(
                    levenshtein_matrix[x-1,y] + 1,
                    levenshtein_matrix[x-1,y-1] + 1,
                    levenshtein_matrix[x,y-1] + 1
                )
    return (levenshtein_matrix[taille_chaine1 - 1, taille_chaine2 - 1])
print("distance de levenshtein = " + str(levenshtein("Lorem ipsum dolor sit amet", "Laram zpsam dilir siy amot")))

Le langage Python en moins de 128 mots

Python est un langage de programmation qui est caractérisé par :

  • sa lisibilité : La syntaxe du langage est articulé sur la présentation (importance de l’indentation)
  • Pragmatique : L’objectif est de faire des programmes efficaces qui contiennent le moins de lignes de code possible.

Il est également facile d’accès, on peut ainsi facilement échanger avec d’autre programmeur.

La première version de python date de 1994, Python 3 date de 2008. Le langage est stable puisque les anciennes versions du langages continuent d’être maintenue (mise à jour).

Python est portable, il fonctionne sur la plupart des plateformes (mobile, PC, MAC, Linux …), il y a beaucoup de librairies disponibles.

Python est sous licence PSF, le débat sur les évolutions est démocratique et sont soumises au créateur du langage Guido Van Rossum.

Cycle hamiltonien dans un Graphe en moins de 128 mots

Un cycle Hamiltonien est un cycle qui contient tous les sommets du graphe.

Il n’y a pas d’algorithme général (càd valable pour n’importe quel graphe) et efficace (càd pas d’algorithme dans le nombre d’étape de calcul soit un polynôme de la taille du graphe) pour trouver si il y a un cycle hamiltonien dans un graphe.

Cycle hamiltonien source wikipedia

Condition de DIRAC : Si pour tous les sommets u du graphe G degré(u) >= n /2 alors G contient un cycle hamiltonien

Condition de ORE : Si pour toute paire u et v de non voisins deg(u) + deg(v) >=n alors G contient un cycle hamiltorien

Si un graphe vérifie la condition de DIRAC alors il vérifie la condition de ORE (la réciproque est fausse).

Couplage dans un Graphe en moins de 128 mots

Un couplage est un ensemble d’arête deux à deux indépendantes : elle ne partagent pas de sommets.

Exemple de couplage dans un graphe : les 2 arrêtes rouges ne partagent pas de sommets (2 à 2 indépendantes)

Couplage parfait : Chaque sommet du graphe est dans exactement une arrête du couplage

Exemple de couplage parfait dans un graphe

Un graphe parfait a un nombre pair de sommets (la réciproque n’est pas vraie)

Un couplage parfait est un couplage de taille maximale (impossible à agrandir, on ne peut pas coupler plus), la réciproque n’est pas vraie.

Exemple de couplage maximal mais pas de taille max (càd il est possible de faire par exemple un couplage avec 3 arrêtes)

Exemple d’utilisation : Dans une entreprises logistique les salariés ont un ou plusieurs permis leur permettant de rouler un certain type de véhicule. On peut représenter le problème dans un graphe avec comme sommet les salariés et les véhicules de l’entreprise. Pour résoudre le problème il faut alors trouver un couplage de taille max.

Algorithme glouton pour trouver un couplage maximal :

Etape 1 : On sélectionne une arrête aléatoirement et on la mémorise dans une copie du graphe (à gauche)

Sélection de l’arrête

Etape 2 : On supprime les arrêtes qui sont incidentes aux deux sommets et on sélectionne une autres arrête aléatoirement

Etape 3 : On supprime les arrêtes qui sont incidentes aux deux sommets, on obtient alors un couplage maximal

Google AMP sur WordPress en moins de 128 mots

Google AMP est une technologie de publication qui vous permet de créer des pages Web qui se chargent quasi instantanément sur des téléphones mobiles.

Vous devez créer une autre version de votre site conforme aux normes du projet AMP. Une fois que vous avez fait cela, votre site AMP aura sa propre URL (votresite.com/page/amp) et sera compatible avec les navigateurs Web tels que Chrome, FireFox et Safari.

Pour configurer mon site wordpress je suis allé dans Extensions > Ajouter et j’ai tapé le mot clé « AMP »
J’ai installé et activé l’extension AMP officielle publié par AMP Project Contributors (plus d’infos sur le plugin ici : https://fr.wordpress.org/plugins/amp/)

Dans l’onglet AMP > General on peut configurer le mode de fonctionnement du plugin :

Le plug-in peut être configuré pour suivre l’un des trois modes de modèle différents: Standard, Transitionnel et Lecteur.

En mode standard, vous utilisez AMP comme cadre pour votre site et il n’est pas nécessaire de créer des versions AMP et non-AMP distinctes.

En modes Lecteur et Transition, une page donnée aura une URL canonique ainsi qu’une URL AMP correspondante (jumelée). Le plugin AMP ne sert pas de thème mobile; il ne redirige pas les appareils mobiles vers la version AMP. Au lieu de cela, la version AMP est présentée aux visiteurs mobiles lorsqu’ils trouvent le contenu sur des plateformes telles que Twitter, Pinterest, Recherche Google et autres.

Le mode Lecteur ne prend en charge la diffusion d’AMP que pour les publications, les pages et d’autres types de publication, tandis que les modes Standard et Transition prennent en charge l’ensemble du site au format AMP.

Le Web expliqué en moins de 128 mots

Internet est un réseau informatique, le Web est un réseau d’information qui sont reliées entre elles par l’hypertexte.

Le serveur Web fournit les informations quand on lui demande : des requêtes qui sont faites par des clients Web.

Le navigateur permet de consulter les informations, il envoie une requête HTTP sur le réseau internet.

Le moteur de recherche répond par une liste d’url. Les pages Web contiennent du code HTML décrit la structure et le contenu du document. La feuille de style CSS contient la mise en forme du code.

Le navigateur interprète HTML et CSS et l’affiche lisible par l’internaute. Les Robots du moteur de recherche sont appelés des « araignées » il parcourt les pages Web et leurs liens : ils font du crawl de site web.

PageRank Python – Implémentation de l’algorithme en python

PageRank python est un algorithme utilisé par Google Search pour classer les sites Web dans les résultats de leurs moteurs de recherche. PageRank est un moyen de mesurer l’importance des pages de site Web.

pagerank python

Introduction :

Ce n’est pas le seul algorithme utilisé par Google pour ordonner les résultats des moteurs de recherche, mais c’est le premier algorithme utilisé par la société, il est le plus connu.

Le PageRank d’une page est calculé à partir de la somme du PageRank des pages avec un lien entrant à la page calculée que l’on divise par le nombre de pages sortantes de cette dernière, on applique un facteur d’atténuation pour symboliser la probabilité que l’utilisateur surfe sur une autre page.

Implémentation pagerank python :

J’installe networkx, c’est un package Python pour la création, la manipulation et l’étude de la structure, de la dynamique et des fonctions de réseaux complexes.

Networkx fournit des structures de données et des méthodes pour stocker des graphes que j’utilise pour l’algorithme pagerank.

import networkx as nx
import numpy as np

graphe=nx.DiGraph()

tableauPages = ["A","B","C"] #Exemple de page rank avec 3 pages
graphe.add_nodes_from(tableauPages) #Ajout des sommets du graphe

#on ajoute des arcs, on a :
#la page A a un lien vers B 
#la page B a un lien vers C
#la page C a un lien vers B
#la page C a un lien vers A
# la page B a 2 lien entrant
# la page C a un lien entrant 2 liens sortant
# la page A a un lien entrant un lien sortant
graphe.add_edges_from([('A','B'), ('C','A'),('B','C'), ('C','B')])
print("Sommets du graphe : ")
print(graphe.nodes())
print("Arrêtes du graphe : ")
print(graphe.edges())
#Si on considere un facteur d'attenuation de 0.85 = d
# la formule du page rank est :
#PR(p) = (1-d)/n + d * Somme de toutes les pages(PR(i) des lien entrants à p/nombre de lien sortant de la page qui reference p)
# PR(A) = (1-0,85)/3 + 0,85 * (PR(C)/2)
# PR(B) = (1-0,85)/3 + 0,85 * (PR(A)/1 + PR(C)/2)
# PR(C) = (1-0,85)/3 + 0,85 * (PR(B)/1)

pagerank = nx.pagerank(graphe)
print(pagerank)

Pagerank python liens externes :

https://fr.wikipedia.org/wiki/M%C3%A9thode_des_k_plus_proches_voisins

https://www.python.org/

https://www.educative.io/blog/python-algorithms-coding-interview

Liens internes :

http://128mots.com/?s=dijkstra

Le tri par insertion en Python en moins de 128 mots

Le tri par insertion est un tri lent, stable, en place (on travaille sur la structure directement et pas une copie).

Le tri par insertion est comparable au tri que l’on effectue d ‘un jeu de carte. 

def tri_par_insertion(tableau):
	#parcours de tout les elements du tableau
	global nombre_operation
	for i in range(1,len(tab)-1):
		#pour chacun des elements du tableau on parcours les precedent et on echange
		#on sauvegarde la valeur de l'element courant
		valeurElementCourant = tableau[i]
		print("element courant : " + str(tableau[i]) + " - indice i=" + str(i))
		j = i
		#on definit l'indice j et on parcours les elements predents tant qu'il '
		while(j>0 and tableau[j-1]>valeurElementCourant):
			#si l'element parcouru parmi les valeurs precedente est superieur a l'element courant on l'insere à sa place et on decale a gauche
			tableau[j] = tableau[j-1]
			j -= 1
			nombre_operation +=1
		#lorsqu'on sort de la boucle on a place tout les elements superieur a l'element courant a droite de j il faut alors mettre l'element courant à la position j
						
	tableau[j] = valeurElementCourant
		
nombre_operation = 0
tab = [3,9,6,1,2,4,7,5,8]
print("avant tri par insertion : " + str(tab))
tri_par_insertion(tab)
print("apres tri par insertion : " + str(tab))
print("nombre d'operation : " + str(nombre_operation))

Glossaire sur les graphes en un peu plus de 128 mots

source wikipedia : Graphe non orienté

Graphe (Graph) : Un ensemble de point reliés entre eux

Sommets (vertices, a vertex) : Les points d’un graphe s’appellent des sommets
Sommets adjacents (adjacent vertices) : Deux sommets sont adjacents si ils sont reliés entre eux
Arête (edge) : La liaison entre deux sommets s’appelle une arête si la relation entre deux sommet n’est pas orientée (pas de notion de précédence, ou d’ordre dans lequel on visite les deux sommets).

source wikipedia : graphe orienté


Arc (arc): La liaison orientée entre deux sommet (c’est une flèche qui indique le sens de la relation orientée, il y a une notion d’ordre d’exécution et de contrainte pour visiter les deux sommets)
Le degré d’un sommet (the degree of a vertex) : Nombre d’arêtes qui partent d’un sommet.
Ordre d’un graphe (order of a graph) : Le nombre de sommet dans un graphe.
Graphe Connexe (connected graph) : Un graphe est connexe si tous les sommets sont reliés par une chaine quelconque.
Chaine Eulerienne (eulerian path) : Une chaine qui prend toutes les arêtes une seule fois du graphe.


Matrice d’adjacente : La matrice d’adjacence d’un graphe est une matrice dont les lignes et les colonnes sont toutes deux indexées par les sommets du graphe, avec un 1 dans la cellule pour la rangée i et la colonne j lorsque les sommets i et j sont adjacents, et un 0 sinon.

source wikipedia : matrice d’adjacence

CookieViz téléchargement, installation et utilisation

CookieViz est outil de visualisation qui permet de mesurer l’impact des cookies lors de votre propre navigation.

https://linc.cnil.fr/fr/cookieviz-une-dataviz-en-temps-reel-du-tracking-de-votre-navigation

Introduction – Installer et utiliser CookieViz

La page est git est https://github.com/LINCnil/CookieViz

J’installe MAMP : https://www.mamp.info/en/downloads/

MAMP est une compilation de logiciels gratuits open source permettant de gérer des sites Web dynamiques sur des ordinateurs exécutant macOS ou Windows : Apache, le serveur Web; MySQL, le système de gestion de base de données; et PHP, Perl ou Python, langages de programmation utilisés pour le développement Web.

Installer Homebrew : Homebrew est un système de gestion logiciel gratuit open source qui simplifie l’installation de logiciels sur le système d’exploitation macOS d’Apple et Linux.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Le script demande de passer en mode superutilisateur via la commande sudo et demande de taper le mot de passe à plusieurs reprise.

A la fin de l’installation on obtient ==> Installation successful!

J’installe mitmdump qui est dans le paquet mitmproxy

brew install mitmproxy

Valider l’installation en tappant mitmdump –version

mitmdump --version
 Mitmproxy: 4.0.4
 Python:    3.7.5
 OpenSSL:   OpenSSL 1.1.1d  10 Sep 2019
 Platform:  Darwin-17.7.0-x86_64-i386-64bit

Démarrage de CookieViz

Je démarre MAMP et non MAMP PRO qui est payant

J’obtiens la page d’accueil de mon serveur Web Apache qui est démarré sur le port 8888 par défaut je peut l’atteindre en tapant localhost:8888 comme url dans mon navigateur.

Si je vais dans le menu MAMP > Preferences je peux modifier les ports utilisés.

j’ai téléchargé depuis le source github de cookieViz https://github.com/LINCnil/CookieViz via le lien Clone and download. Il est aussi possible de démarrer un terminal et de se placer à la racine du serveur WEB Apache.

Par défaut la racine est dans /Applications/MAMP/htdocs/ mais vous pouvez la modifier via l’interface graphique MAMP

cd /Applications/MAMP/htdocs/
git clone https://github.com/LINCnil/CookieViz.git

Démarrer CookieViz

Par défaut l’utilisateur par défaut de la base de donnée est « root » et le mot de passe « root »
Pour changer le mot de passe par defaut :
https://documentation.mamp.info/en/MAMP-Mac/How-Tos/Change-the-password-of-the-MySQL-root-user/
/Applications/MAMP/Library/bin/mysqladmin -u root -p password

Ajout d’un utilisateur phpmyadmin > mysql > user ‘ajouter un utilisateur’ onglet Comptes utilisateurs

J’ai ajouté un user ‘cookvi’ avec mot de passe ‘cookvi’

J’ai édité le fichier settings.inc via un editeur de texte ou la commande nano

/**
 * The database server used by CookieViz.
 * Default is 'localhost' and should be fine for most cases.
 * If 'localhost' doesn't work and the database runs locally, try '127.0.0.1'.
 */
define('DB_SERVER', '127.0.0.1:8889');

...

define('DB_USER', 'cookvi');

/**
 * The password of the CookieViz database user.
 */
define('DB_PASSWD', 'cookvi');

J’ai ensuite édité le fichier nano monitor_mitmdump.php du répertoire /soft

cd /Applications/MAMP/htdocs/CookieViz/soft/
nano monitor_mitmdump.php 

je suis allé dans http://localhost:8888/phpmyadmin/ et j’ai créé une nouvelle base CookieViz

J’ai cliqué sur la base de donnée créée et j’ai utilisé la fonction « importer » et j’ai chargé le fichier /Applications/MAMP/htdocs/CookieViz/cookieviz/sql/url_referer-1.sql qui contient la structure de table

// Edit the four values below
$PROXY_HOST = « localhost »; // Proxy server address
$PROXY_PORT = « 8082 »; // Proxy server port
$PROXY_USER = «  »; // Username
$PROXY_PASS = «  »; // Password

CookieViz – Modification pour compatibilité php5 et php7

CookieViz est compatible php5 et non phpt7 il faut prévoir des changement dans le code :

Remplacement de :

$link = mysql_connect('localhost', '', '') par $link = mysqli_connect('127.0.0.1:8889', 'cookvi', 'cookvi','CookieViz') 
mysql_select_db('CookieViz') par mysqli_select_db($link,'CookieViz')
mysql_error() par mysqli_connect_error()
mysql_query($query) par mysqli_query($link, $query)
mysql_fetch_assoc($result) par mysqli_fetch_assoc($result) 
mysql_close($link) par mysqli_close($link)  

Démarrer un serveur mitmdump sur le port 8082 :
mitmdump -p 8082 -w mitmdump.log

Je lance maintenant le script php /Applications/MAMP/htdocs/CookieViz/soft/monitor_mitmdump.php

Au niveau de firefox je suis allé dans les préférence réseau dans les paramètre généraux et j’ai configuré le proxy

CookieViz installer et utiliser

On constate qu’on a des connexions qui passent par le proxy
Proxy server listening at http://*:8081
127.0.0.1:49915: clientconnect
127.0.0.1:49915: CONNECT www.youtube.com:443
<< Cannot establish TLS with client (sni: www.youtube.com): TlsException(« SSL handshake error: Error([(‘SSL routines’, ‘ssl3_read_bytes’, ‘sslv3 alert bad certificate’)]) »)
127.0.0.1:49917: clientconnect
127.0.0.1:49915: clientdisconnect
127.0.0.1:49917: GET http://detectportal.firefox.com/success.txt
<< 200 OK 8b
127.0.0.1:49919: clientconnect
127.0.0.1:49920: clientconnect
127.0.0.1:49919: GET http://detectportal.firefox.com/success.txt?ipv4
<< 200 OK 8b
127.0.0.1:49920: GET http://detectportal.firefox.com/success.txt?ipv6
<< 200 OK 8b

Les résultats sont alors visualisables sur le serveur web http://localhost:8888/CookieViz/cookieviz/

Liens externes :

https://fr.wikipedia.org/wiki/Cookie_(informatique)

https://fr.wikipedia.org/wiki/Serveur_web

https://www.noodo-wifi.com/faq/cookie-informatique/

Liens internes :

http://128mots.com/index.php/category/sciences-numeriques-et-technologie/

http://128mots.com/index.php/category/nsi/

http://128mots.com/index.php/category/non-classe/