On peut programmer avec Python de plusieurs manières :
Il existe aussi des consoles en ligne.
Aspect général d'EduPython
Pour compiler et exécuter un programme, il faut utiliser la touche .
>>>
devant l'instruction.
Le but est d'ouvrir le logiciel EduPython et/ou le logiciel Jupyter afin de copier-coller les
codes proposés.
Attention : ne pas copier-coller les symboles >>>
Une vidéo de présentation de la console et d'EduPython. Cette vidéo commence par l'installation d'EduPython.
Quelques commandes
>>>print("hello world !")
Quelques exemples d'affectation de variables en mode console
L'instruction (en mode console) :>>>x = 2
Le symbole =
est utilisé pour affecter des valeurs aux variables
>>>print(x)
Remarquez l'absence de " ". Testez les lignes suivantes :
>>>x = "Hello world !"
>>>print("x")
>>>print(x)
L'instruction
>>>x = x+1
est très fréquente en
informatique.
Sous python, on peut affecter une valeur à plusieurs variables simultanément :
>>>a,b=2,3
>>>a
>>>b
A partir de cette section, vous devez écrire vos programmes dans l'espace des scripts et utiliser le symbole pour exécuter vos programmes.
En Python une fonction est définie par l'instruction composée def
suivie du nom de la fonction
et se termine obligatoirement par deux points :
puis le bloc d'instructions qu'il ne faut pas oublier d'indenter.
Une fonction est utilisée comme une instruction quelconque. Dans le corps d'un programme, un appel de fonction est constitué du nom de la fonction suivi de parenthèses.
La notion de fonction en informatique relève du même concept qu'une fonction mathématiques, c'est-à-dire qu'on définit une fonction puis on l'applique à différentes valeurs.
def carree(a) :
"""
Fonction permettant de renvoyer le carré du nombre a qui est en paramètre
"""
return a**2 # renvoie l'image de a par la fonction carree
Vous remarquerez le symbole :
très important en Pyton qui marque le début d'un bloc.
C'est l'indentation
qui délimite le bloc d'instructions.
Lorsqu'on définit la fonction carree()
, a
est appelé paramètre de
la fonction.
Lorsqu'on appelle la fonction avec une valeur explicite pour a, comme dans carree(3)
,
on dira plutôt que 3 est un argument de
la fonction.
En appelant la fonction carree()
d'argument 3, on obtient 9
Quelques remarques.
La fonction est autodocumentée par un texte : """ Ecrire ici la description """
(c'est ce que l'on appelle le docstring de la fonction).
Le docstring
d'une fonction permet de donner des informations sur la fonction et le lien entre
les entrées et la sortie
(en d'autres termes, le rôle de la fonction).
Quant on saisit dans la console, après l'exécution de la fonction, l'instruction
help(nom de la fonction)
,
Python affiche le docstring de la fonction ce qui nous permet d'avoir des informations sur
la fonction en cas d'oubli.
>>> help(carree)
Help on function carree in module __main__:
carree(x)
Fonction permettant de renvoyer le carré
du nombre x qui est en paramètre
return
. Ce qui suit le return
est
l'image des entrées par la fonction.
Dès que la fonction rencontre un return
, elle renvoie ce qui suit le return
et
stoppe son exécution.
Commentaire
:
le symbole #
apparaîtra à maintes reprises. Il marque le début d’un commentaire
que la fin de la ligne termine.
Autrement dit, un commentaire est une information aidant à la compréhension du programme
mais n’en faisant pas partie. Une fonction renvoie une valeur et une procédure ne renvoie rien. Le langage Python ne fait pas la différence entre les deux, il utilise l'instruction def
pour les deux.
Par contre l'instruction return
n'est pas obligatoire dans le cadre d'une procédure.
Il est conseillé d'écrire return None
dans le cadre d'une procédure, mais ce n'est pas une obligation.
Tester le programme suivant :
def affichage(mot1,mot2):
print(mot1,mot2)
affichage("SNT","Python")
Transformer cette procédure en ajoutant return None
à la fin de la fonction affichage
. Tester la procédure.
Chercher l'erreur ( il y a une erreur à corriger).
def carré(x):
return x**2
print(carré(1.7))
Chercher l'erreur ( il y a une erreur à corriger).
def quotient(x,y)
return x/y
print(carré(1.7))
Ecrire une procédure moyenne qui reçoit deux nombres (nb_1 et nb_2) en paramètres et qui affiche la moyenne.
Ecrire une fonction moyenne qui reçoit deux nombres (nb_1 et nb_2) en paramètres et qui retourne la moyenne.
Ecrire une fonction vitesse, qui reçoit deux paramètres (la distance d en mètre et le temps de parcours t en seconde) et qui retourne la vitesse en m/s.
Un programme doit souvent prendre en compte différents cas et s'adapter à différentes situations.
Il est alors nécessaire d'écrire des conditions, c'est-à-dire des expressions logiques dont le résultat est soit "Vrai" soit "Faux".
Voici comment s'écrit la structure conditionnelle en python :
if condition :
instruction(s)
else :
instruction(s)
Vous remarquerez le symbole :
très important en Pyton qui marque le début d'un bloc.
C'est l'indentation
qui délimite le bloc d'instructions
# Premier exemple pour vérifier si le code saisi par l'utilisateur est bien Ktimo2004
identifiant=input("Identifiant?")
if identifiant=="Ktimo2004": # l'égalité est testée avec ==
print("Connexion autorisée") # l'instruction est réalisée si la condition est vraie
Dans le cas où la condition est fausse, on peut donner des instructions à l'aide de la commande else
.
identifiant=input("Identifiant?")
if identifiant=="Ktimo2004":
print("Connexion autorisée")
else:
print("accès refusé")
La structure elif
:
if condition1 :
instruction(s)
elif condition2 :
instruction(s)
elif condition3 :
instruction(s)
else :
instructions
a=float(input("Entrer un nombre : "))
if a>0 :
print("Vous avez entré un nombre strictement positif.")
elif a==0 :
print("Vous avez entré un nombre nul.")
else :
print("Vous avez entré un nombre strictement négatif.")
Il est possible d'utiliser plusieurs conditions en utilisant les connecteurs logiques AND et OR.
# Vérification de l'identifiant Ktimo2004 et du mot de passe Mprx24§
identifiant=input("Identifiant?")
motdepasse=input("Mot de passe ?")
if identifiant=="Ktimo2004" and motdepasse=="Mprx24§":
print("Connexion autorisée")
else:
print("accès refusé")
Tester la luminosité d'un pixel
Niveau : accessible
Inspiré de Delagrave p120
On propose le code suivant :
def testLuminosite(R,V,B):
if R+V+B > 255 :
reponse = "c'est un pixel foncé"
else :
reponse = "ce n'est pas un pixel foncé"
return reponse
Tester la fonction :
testLuminosite(12,7,5)
Abonnement et réseau social
Niveau : accessible
Inspiré de Delagrave p145>
" Un abonnement sur un réseau social de vidéo coûte 9.99 € par mois avec trois mois d'essai gratuit pour une seule personne ou 15.99 € avec 1 mois d'essai gratuit pour toute la famille".
Compléter la fonction suivante qui a pour argument le nombre de mois et qui renvoie le prix à payer.
def prix(mois):
abonnement=input("Abonnement ? : seul ou famille ?")
# faire afficher "abonnement minimal d'un an" si le nombre de mois est inférieur à 12
# ...
return(prix)
Tester la fonction avec :
print(prix(12))
Vous devriez observer :
Abonnement ? : seul ou famille ? seul 89.91
Niveau : plus difficile !
Proposer une fonction prenant pour argument un tuple des couleurs RGB codé en base 16 (Codage Hexadécimal). Cette fonction retourne None, elle permettra d'afficher pour chaque composante RGB si c'est plutôt clair ou plutôt foncé en positionnant un seuil à 127.
Chaque composante RGB est une couleur codée en hexadécimal sous 1 octet (de 00 à FF en hexadécimal ou de 0 à 255 niveau de couleur en base décimale).
Convertir les composantes en base 10 décimale et dire pour chaque couleur si la composante est plutôt claire ou plutôt foncée.
# Exécuter cette fonction
# coding: utf-8
def pixelHexa(tupleHexa:tuple)->tuple:
(hexaR, hexaG, hexaB) = tupleHexa
#Extraction des valeurs du tuple et conversion en base décimale
decR, decG, decB = (int(hexaR, 0), int(hexaG, 0), int(hexaB, 0))
# Si la valeur decR est supérieure à 127 alors pixel plutôt foncé
# Sinon pixel plutôt claire
if decR > 127 :
print ("Composante rouge plutôt foncée.")
else : print("Composante rouge plutôt claire")
# Reproduire pour decG et decB
# ...
return None
Tester le code suivant :
tupleHexa = ("0x10","0x45","0xab")
pixelHexa((tupleHexa))
Vous devriez observer :
Composante rouge plutôt claire
Composante verte plutôt claire
Composante bleu plutôt foncée.
Une vidéo qui donne offre une autre présentation :
La boucle pour
est utilisée quand on connait le nombre de fois où l'on doit répéter une suite d'instructions.
Pour illustrer cette structure nous allons partir sur un premier exemple : Obtenir la somme des n premiers entiers naturels. Pour n=4, on veut écrire un programme qui renvoie la valeur de 0+1+2+3=6.
La première ligne fait que la suite du code va être répétée n fois en incrémentant de manière automatique la variable i de 0 à n-1.
Dans un premier temps l'attribut dans range
sera un entier, nous verrons
dans la suite qu'il peut en être autrement.
for i in range(n):
...
les différentes instructions à répéter
...
def somme(n): #les int sont ici pour indiquer le typage des variables d'entrée et de sortie. Ici l'attribut est de type int et la sortie également
"""""La fonction somme renvoie la somme des n+1 premiers entiers naturels.
la fonction somme a pour attribut un entier (int) : n et renvoie un autre entier :S
Pour n=4 : S=0+1+2+3=10"""""
S=0 #initialisation de la somme à 0
for i in range(n):
S=S+i
return S
somme(20)
Programmer un signal clignotant : créer une fonction qui renvoie une liste contenant alternativement des 0 et des 1 symbolisant une led qui clignote.
def clignotant():
led=[]
for i in range(10):
led.extend([1,0])
return led
print(clignotant())
Un programme permettant d'afficher le mot clignotement.
import time #importe la bibliothèque time
for i in range (10):
print ('Clignotement') # Affichage du mot Clignotement dans la console
time.sleep(3) #Permet de suspendre durant 3 secondes l'exécution du programme
Modifier le code pour afficher 20 fois le mot "bonjour" toutes les secondes.
Le but est compter le nombre de 'e' dans une phrase.
def nbre_de_e(phrase):
compteur=0
for lettre in phrase:
if lettre=="e":
compteur=compteur+1
return compteur
print("Le nombre de e est :",nbre_de_e("hello world!"))
Transformer l'algorithme pour qu'il compte le nombre de voyelles.
Une vidéo sur les boucles for
:
Ces boucles, aussi appelées boucles "Tant que" ou boucles "While" effectuent les instructions situées dans le corps de la boucle tant qu'une condition est vérifiée. En langage Python, la syntaxe est la suivante :
while condition_est_vraie:
instruction 1
instruction 2
A l'instar des structures conditionnelles (si alors sinon) et des boucles bornées (pour), le corps de la boucle est constitué d'instructions indentées.
On utilise cette boucle lorsque l'on ne sait pas à l'avance combien de fois seront effectuées les instructions du corps de la boucle. Cela peut être lié à la valeur d'une ou de plusieurs variables dont la valeur évolue, parfois à cause de la décision de l'utilisateur.
Niveau : accessible
Le nombre de connexions à un serveur double chaque jour. Au bout de combien de jours dépassera-t-il 100 000 ?
nb_jours=1
nb_connexions=400
while nb_connexions<100000:
nb_connexions=nb_connexions * 2
nb_jours=nb_jours+1
print(nb_jours)
Niveau : accessible
Dans cet exemple, la condition dépendra de valeurs d'une liste (liste obtenue par un capteur ou issue d'un fichier au format .txt ou .csv par exemple).
Imaginons un capteur qui mesure les masses de marchandises sur un tapis roulant et les stocke au fur et à mesure dans une liste. Ces marchandises arrivent dans un camion. Le tapis roulant doit s'arrêter lorsqu'une certaine masse maximale, de 3000 kg est atteinte, le temps que le camion parte et un autre arrive. A ce moment un signal est émis.
def signal(chargement): # la fonction signal, ici un message, pouvant être une vraie sonnerie ou l'allumage d'une led.
print("SONNERIE")
print("Le camion est constitué de",chargement)
march=[100,500,200,1000,150,1000,2000] # liste des masses des marchandises
masse=march[0] # la masse initiale est celle de la première marchandise
i=0
camion=[] # liste du chargement du camion
while masse<= 3000:
camion.append(march[i])
i=i+1
masse=masse+march[i]
signal(camion)
Niveau : plus difficile
Dans cet exemple, la condition dépendra de l'atteinte de la fin d'un fichier marchandises.csv comme ci-dessous
On veut ajouter les masses de toutes les lignes du fichier csv : le fichier marchandises.csv.
f=open("marchandises.csv","r")
entete=f.readline() # on lit l'entête objet ; masse qui ne nous intéresse pas ici
ligne=f.readline() # lecture de la 2ème ligne
masse=0
while ligne!="": # tant que la ligne n'est pas vide...
liste=ligne.split(";"); masse_objet=int(liste[1]) # on transforme la ligne en liste, par ex ['objet1','100'] puis on affecte à la variable masse_objet le 2ème élément, transformé en entier.
masse=masse+masse_objet
ligne=f.readline()
print("la masse totale est",masse)
f.close
Les exemples ci-dessus peuvent illustrer les chapitres "données structurées et traitement" et "informatique embarquée et objets connectés" (les données captées peuvent alors être incluses dans un fichier .csv ou traitées à la volée).
Mot de passe
Ecrire la fonction mot_de_passe ci-dessous demande le bon mot de passe tant que celui-ci n'est pas fourni :
login='PYTHON'
def mot_de_passe():
mdp=input('Entrez votre mot de passe : ')
...
mot_de_passe()
print('Vous pouvez continuer...')
Connexion au réseau d'un téléphone
Niveau : plus difficile
Ce programme demande à l'utilisateur s'il veut activer la connexion réseau de son téléphone tant qu'il répond "non".
localisation = "oui"
connexionReseau = "non"
while localisation == "oui" and connexionReseau == "non":
print("Votre localisation est enregistrée mais n'est pas envoyée au serveur")
connexionReseau = input("Voulez-vous activer la connexion réseau ?")
print("Votre localisation est enregistrée et est envoyée au serveur")
Ecrire un programme dans lequel la connexion réseau n'est pas activée et qui demande à l'utilisateur s'il veut activer le partage de localisation tant qu'il répond "non". A l'activation de la localisation, il affiche "Votre localisation est enregistrée".
Une vidéo de présentation des boucles while :
Et une autre :
Pour observer l’exécution d’un programme, nous pouvons utiliser une application web : pythontutor
Une vidéo présentant le fonctionnement de pythontutor :
Dans cette partie, nous vous proposons une succession d'activités pour SNT qui demandent un certain niveau d'expertise en python.
Au format jupyter : Pour aller plus loin sur les conditions.
Au format pdf : Pour aller plus loin sur les conditions.
Le fichier de corrections et les fichiers nécessaires à la réalisation des activités : Corrections et les fichiers nécessaires.
Au format jupyter : Pour aller plus loin sur les boucles bornées.
Au format pdf : Pour aller plus loin sur les les boucles bornées.
Au format jupyter : Pour aller plus loin sur les boucles non bornées.
Au format pdf : Pour aller plus loin sur les boucles non bornées.
Vous pouvez créer votre propre bibliothèque. Il faut enregistrer votre fichier au format .py . Il existe plusieurs méthodes. L'exemple proposé concerne un fichier de mathématiques appelé analytique.py qui possède des fonctions de géométrie analytique (distance, milieu, etc.).
Une partie du fichier analytique.py
from math import *
def milieu(xA,yA,xB,yB):
""" Renvoie les coordonnées du milieu du segment [AB]
pour appeler la fonction milieu, il faut écrire milieu(1,1,3,-1) pour A(1;1 et B(3;-1)"""
return (xA+xB)/2,(yA+yB)/2
# Ecrire la fonction distance(xA,yA,xB,yB) qui renvoie la distance AB
def distance(xA,yA,xB,yB):
""" Renvoie la distance AB
pour appeler la fonction distance, il faut écrire distance(1,1,3,-1) pour A(1;1) et B(3;-1)"""
d=sqrt((xB-xA)**2+(yB-yA)**2)
# x**2 correspond à x²
# sqrt(x) correspond à la racine carrée de x
return d
# méthode 1 : cette commande fonctionne si les deux fichiers sont dans le même dossier.
from analytique import *
# méthode 2 : cette commande fonctionne si le fichier est dans le sous-dossier module
from module.analytique import *
# Méthode 3 : créer votre module dans C:/EduPython/Lib/site-packages
from analytique import *
# Méthode 4 : plus compliquée
import sys
sys.path
sys.path.append("C:\\Users\\Pascal\\Google Drive\\Lycée général\\Python\\ModulesPersonnels") # Chemin à adapter à votre configuration
Exemple d'exécution
from analytique import *
distance(1,1,2,2)
help(distance)
Dans les applications proposées les docstring et commentaires décrivent les actions du code.
# Créé G.V. en Python 3.4
# coding: utf-8
'''
=================
Lecture de pages web
Formation SNT Académie de Reims 2019-2020
====================
'''
import urllib.request
#https://docs.python.org/fr/3/library/urllib.html
def nb_occurrences(mot,adrWeb):
"Renvoie le nombre d'occurrences de la chaine de caractères 'mot' dans la page Web"
pageWeb=urllib.request.urlopen(adresseWeb)
codeHTML=str(pageWeb.readall()) # code de la page web
nbocc=codeHTML.count(mot) #l est du type byte. On utilise donc str(l) pour le convertir en chaine de caractères
return nbocc
def listeLiens(adrWeb):
"Renvoie le nombre d'occurrences de la chaine de caractères 'mot' dans la page Web"
import re
expRegLienWeb = re.compile('<a href="?(.*?)"?>',re.IGNORECASE)
pageWeb=urllib.request.urlopen(adresseWeb)
codeHTML=str(pageWeb.readall()) # code de la page web
lLiens=expRegLienWeb.findall(codeHTML)
return lLiens
def nbLiensPagesLiees(adrWeb):
"renvoie le nombre de pages liées à adrWrb ainsi que le total des liens de ces pages"
lLiens=listeLiens(adrWeb)
nbLiens=0
for lien in lLiens:
nbLiens=nbLiens+nb_occurrences("< href=",lien)
return nbLiens,len(lLiens)
def afficheInfos(adresseWeb):
"Affiche des informations sur la page"
pageWeb=urllib.request.urlopen(adresseWeb)
print("Informations sur la page ",adresseWeb)
print(pageWeb.info())
print('code de la réponse :',pageWeb.getcode())
adresseWeb="https://fr.m.wikipedia.org/wiki/Jude_Law"
print(" Pour la page ",adresseWeb)
lLiens=listeLiens(adresseWeb)
print("Liste des liens de cette page :")
print(lLiens)
#afficheInfos(adresseWeb)
monMot="acteur"
nbo=nb_occurrences(monMot,adresseWeb)
print(" On a trouvé %d fois le mot %s dans le code source de la page web %s"%(nbo,monMot,adresseWeb))
nbl,nbp=nbLiensPagesLiees(adresseWeb)
print(" la page %s pointe sur %d pages web qui elles-mêmes pointent sur %d pages web soit une moyenne de %1.1f liens par pages filles"%(adresseWeb,nbp,nbl,nbl/nbp))
Pour ce code, le fichier csv nécessaire à son exécution se trouve après le code en téléchargement.
# Créé G.V. en Python 3.4
# coding: utf-8
'''
=================
Formation SNT Académie de Reims 2019-2020
====================
'''
import os
def repondAuPing(adresse):
#renvoie True si le serveur correspondant à l'adresse a répondu à un ping
#cette adresse est une chaine de caractères comme "216.58.213.131" ou "www.google.fr"
reponseAuPing=os.popen('ping '+adresse+' -n 1 -w 500').read()
if reponseAuPing.find('TTL')>1:
return True
else:
return False
def afficheTestAdresse(adresse):
if repondAuPing(adresse):
print (adresse, "a répondu au ping")
else:
print (adresse, "n'a pas répondu au ping")
return
def afficheTestPlage(chaine3premiersOctets):
for k in range(256):
afficheTestAdresse(chaine3premiersOctets+"."+str(k))
return
def afficheTestListe(lAdresses):
"Affiche les résultats d'un ping auprès de chaque adresse de la liste"
for adr in lAdresses:
afficheTestAdresse(adr)
return 0
def afficheTestCSV(nomFichier="adrverbes.csv"):
"Affiche les résultats d'un ping auprès de chaque adresse d'un fichier texte"
monfichier = open(nomFichier, "r")
for adr in monfichier:
afficheTestAdresse(adr)
monfichier.close()
return
print(repondAuPing("192.168.1.1"))
print(repondAuPing("192.168.1.11"))
print(repondAuPing("216.58.213.131"))
afficheTestListe(['www.etre.fr','www.avoir.fr','www.faire.fr','www.dire.fr','www.pouvoir.fr','www.aller.fr','www.voir.fr','www.vouloir.fr'])
afficheTestPlage("192.168.1")
afficheTestCSV("adrverbes.csv")
Fichier csv à placer dans le même répertoire que le fichier Python.
Représentation simple d'un graphe à l'aide de la bibliothèque networkx.
On cherche à représenter un réseau social où les sommets sont numérotés. Dans l'exemple ci-dessous, on numérote de 0 à 4.
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
# Définir un graphe avec des sommets représentés par des nombres.
g=nx.Graph() # Définition du graphe
g.add_nodes_from(range(5)) # Cinq sommets pour le graphe
g.add_edges_from([(0,1),(3,4),(4,2),(1,3),(4,0),(1,2)]) # Définition des liaisons entre les sommets.
options = {
'node_color' : 'yellow',
'node_size' : 550,
'edge_color' : 'tab:grey',
'with_labels': True
}
plt.figure()
nx.draw(g,**options) # Dessin du graphe
plt.show() # Affichage du graphe
# Exercice : modifier la couleur du graphe, la taille, les liens.
Dans la cellule suivante, modifier le code de la cellule pour ajouter un lien entre le noeud 0 et le noeud 3 puis entre le noeud 0 et le noeud 2. Ajouter le sommet 5. Ajouter un lien entre le noeud 5 et le noeud 3.
Pour continuer ce travail, vous pouvez télécharger le fichier jupyter.
Pour ce code, le fichier jpg nécessaire à son exécution se trouve après le code en téléchargement.
# -*- coding: utf-8 -*-
'''
======================
Traitement d'images
Créé par G.Valance en Python 3.4
Formation Python Académie de Reims 2018-2019
Ceci est un début de programme de traitement d'images selon le programme SNT.
'''
from PIL import Image
from PIL.ExifTags import TAGS #Pour avoir les intitulés des Tags présents dans les données exif d'une image
def coordGPS(mon_image):
"Renvoie les coordonnées GPS en mode texte"
"copiable/collable dans Geoportail https://www.geoportail.gouv.fr/carte"
"On gagnera beaucoup à faire exécuter ce code pas à pas dans la console ou en mode debug "
"afin de permettre aux élèves de voir combien, en fait, le code de cette fonction est trivial"
dexif=mon_image._getexif() #le dictionnaire correspondant aux données exif de l'image
coord=dexif[34853] #l'élément correspondant aux coordonnées GPS
N_ou_S=coord[1] # N ou S
tlat=coord[2] #tuple contenant les fractions correspondant aux degrés minutes secondes
latdeg=tlat[0][0]/tlat[0][1] #Valeurs décimales à partir des fractions
latminf=(tlat[1][0]/tlat[1][1]) #Valeur décimale des minutes
latmin=int(latminf) #Valeur entière des minutes
latsec=int(tlat[2][0]/tlat[2][1]+(latminf-latmin)*60) #Aux secondes on ajoute la partie fractionnaire des minutes
latdec=latdeg+latmin/60+latsec/3600 #Valeur décimale de la latitude
E_ou_W=coord[3] #E ou W
tlong=coord[4] #tuple contenant les fractions correspondant aux degrés minutes secondes de la longitude
longdeg=tlong[0][0]/tlong[0][1]
longminf=(tlong[1][0]/tlong[1][1])
longmin=int(longminf)
longsec=int(tlong[2][0]/tlong[2][1]+(longminf-longmin)*60)
longdec=longdeg+longmin/60+longsec/3600
s="%d°%d'%d""%s "%(latdeg,latmin,latsec,N_ou_S)+"%d°%d'%d""%s"%(longdeg,longmin,longsec,E_ou_W)#Coordonnées Sexagécimales
s="%f%s,%f%s"%(latdec,N_ou_S,longdec,E_ou_W) #Coordonnées Décimales
return s
def demo(mon_image):
dexif=mon_image._getexif() #le dictionnaire correspondant aux données exif de l'image
for k in [272,306,34853]:
nomk = TAGS.get(k) #Pour récupérer l'intitulé du tag N°k présent dans dexif
#On pourra aller voir http://www.exiv2.org/tags.html
print("Donnée n°%d %s :%s"%(k,nomk,dexif[k]))
print("Coordonnées de la prise de vue à copier coller dans Geoportail : %s"%coordGPS(mon_image))
mon_image=Image.open("leonard.jpg") #48°51'40" N 2°20'12" E ou 48.861111111111114 2.336666666666667
demo(mon_image)
Fichier jpg à placer dans le même répertoire que le fichier Python.
Pour ce code, le fichier jpg nécessaire à son exécution se trouve après le code en téléchargement.
# -*- coding: utf-8 -*-
'''
======================
Traitement d'images
Crée par G.Valance en Python 3.4
Formation Python Académie de Reims 2018-2019
Ceci est un début de programme de traitement d'images selon le programme SNT.
'''
from PIL import Image
def negatif(mon_image):
"Renvoie le négatif de mon_image"
image2=mon_image.copy()
(l, h) = image2.size
for y in range(h):
for x in range(l):
c = image2.getpixel((x, y))
inv = (255-c[0],255-c[1],255-c[2])
image2.putpixel( (x, y), inv)
return image2
mon_image=Image.open("buse.jpg")
mon_image.show()
mon_image_neg=negatif(mon_image)
mon_image_neg.show()
Fichier jpg à placer dans le même répertoire que le fichier Python.
# -*- coding: utf-8 -*-
'''
======================
Traitement d'images
Créé par G.Valance en Python 3.4
Formation Python Académie de Reims 2018-2019
Ceci est un début de programme de traitement d'images selon le programme SNT.
'''
from PIL import Image
def image_avec_un_point(l=200,h=200):
"Renvoie une image avec un pixel blanc au centre"
image1 = Image.new('RGB', (l,h))
image1.putpixel( (50, 50),(255,255,255))
return image1
mon_image=image_avec_un_point(l=100,h=100)
mon_image.show()
# -*- coding: utf-8 -*-
'''
======================
Traitement d'images
Créé par G.Valance en Python 3.4
Formation Python Académie de Reims 2018-2019
Ceci est un début de programme de traitement d'images selon le programme SNT.
'''
from PIL import Image
def image_avec_un_point(l=200,h=200):
"Renvoie une image avec un pixel blanc au centre"
image1 = Image.new('RGB', (l,h))
image1.putpixel( (50, 50),(255,255,255))
return image1
def image_avec_une_ligne(l=200,h=200):
"Renvoie une image avec un pixel blanc au centre"
image1 = Image.new('RGB', (l,h))
for i in range(l):
image1.putpixel( (i, h//2),(i % 256,100,0)) # // division entière. % Pour que la composante Rouge soit entre 0 et 255
return image1
def image_avec_un_degrade(l=200,h=200):
"Renvoie une image avec un pixel blanc au centre"
image1 = Image.new('RGB', (l,h))
for i in range(l):
for j in range(h):
image1.putpixel( (i, j),(i % 256,j%256,0)) # // division entière. % Pour que la composante Rouge soit entre 0 et 255
return image1
mon_image=image_avec_un_degrade(l=256,h=256)
mon_image.show()
Sur le site FranceIOI, vous avez la possibilité de créer un groupe et demander aux élèves de s'inscrire à ce parcours.
Vous pourrez visualiser l'avancée des élèves.
Site france IOIQuelques espaces vidéos