\documentclass[a4paper, 11pt]{article}
\usepackage{cp-sujet}
\newcommand{\nomfichier}{[2GT.ALGO03] Intro Python}
\author{Pierquet}
\title{\nomfichier}
%\pdfinfo{/Author (Pierquet)
%	/Title (\nomfichier)}
\usepackage{hyperref}
\hypersetup{pdfauthor={Pierquet},pdftitle={\nomfichier},allbordercolors=white,pdfstartview=FitH}  
\renewcommand{\i}{\text{i}}

\lstnewenvironment{pyt}{
	\lstset{
		language=Python,
		backgroundcolor=\color{backcolour},   
		commentstyle=\color{codegreen},
		keywordstyle=\color{magenta},
		numberstyle=\small\color{codegray},
		stringstyle=\color{codepurple},
		basicstyle=\ttfamily\small,
		breakatwhitespace=false, 
		otherkeywords={self},  
		literate={á}{{\'a}}1 {ã}{{\~a}}1 {é}{{\'e}}1 {î}{{\^i}}1 {ê}{{\^e}}1 {è}{{\`e}}1,
		breaklines=true,                 
		captionpos=b,   
		frame=single,                 
		keepspaces=true,                 
		numbers=left,                    
		numbersep=10pt,                  
		showspaces=false,                
		showstringspaces=false,
		showtabs=false,                  
		tabsize=2,
		rulesepcolor=\color{gray},
		rulecolor=\color{black},
		xleftmargin=.05\textwidth,
		xrightmargin=.05\textwidth
}}{}

\begin{document}

\pagestyle{fancy}
\lhead{\entete{[ALGO]}}
\chead{\entete{\lycee}}
\rhead{\entete{2GT - Décembre 2017}}
\lfoot{\pied{}}
\cfoot{\pied{- \thepage{} -}}
\rfoot{\pied{}}

\grandtitre{TP - Introduction à Python}

\section{Introduction}

\subsection{Pourquoi Python ?}

\intro{
\textbf{Python} est un langage de programmation objet et multiplateformes. Il nécessite une installation sur l'ordinateur (site officiel \url{Python.org}) mais peut aussi être utilisé directement online sur ce même site.

Le langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plates-formes informatiques, des supercalculateurs aux ordinateurs centraux, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et aussi avec Java ou encore .NET.
 
Il est utile d'instaler un logiciel nommé \textbf{IDE} (environnement de développement) afin de faciliter l'utilisation de Python. De nombreux sont disponibles, mais nous privilégions un logiciel \textbf{français} développé par l'académie d'Amiens, {\red\textbf{EduPython}}. Ce dernier s'installe avec Python automatiquement et est largement suffisant pour une utilisation au lycée. Quelque soit votre choix, il faut que la version de Python utilisée soit au moins 3.x, car les versions précédentes ne sont plus compatibles.
}

\espacetitre

\subsection{Glossaire}

\algo{
Le symbole \# (se lit \og croisillon \fg{}, \og hash \fg{} en anglais , symbole proche du \og dièse \fg{}) permet de faire figurer dans le corps du programme un commentaire qui ne sera pas pris en compte lors de son exécution.

\smallskip

Le symbole = n’est pas celui de l’égalité mathématique, il n’est d’ailleurs pas symétrique. Il s’agit d’affecter une valeur à une variable : on stocke une valeur numérique ou du texte dans une mémoire.

\smallskip

\texttt{puissance(a,n)} ou \texttt{a**n} donnent le résultat de $a^n$ où $a$ et $n$ sont deux nombres.

\smallskip

\texttt{sqrt(a)} donne le résultat de $\sqrt{a}$ où $a$ est un réel positif.

\smallskip

Le module \texttt{lycee} permet de charger les commandes les plus utiles au lycée.
}

\espacetitre

\section{Une première approche}

\subsection{Quelques commandes sous Python}

\begin{pyt}
	VarA=2 # la variable VarA vaut 2
	b4=3.1 # la variable b4 vaut 3,1
	s=b4+3 # s vaut 6.1
	c,d=4.2,7 # c vaut 4,2 et d vaut 7
	e="bonjour" # e vaut "bonjour" (chaîne de caractères)
	E="Hello!" # E vaut "Hello!" (chaîne de caractères différente de e)
\end{pyt}

\subsection{L'application EduPython}

\algo{
L'interface d'EduPython comporte plusieurs zones dont :
\begin{itemize}
	\item la zone A, Zone de saisie du programme ;
	\item et la zone B, Zone où le programme s'exécute, cette zone s'appelle aussi la console Python,
\end{itemize}

Lorsque vous cliquez sur \textit{Nouveau Fichier}, vous pouvez choisir 3 types de programmes différents (Lycée, tortue et Python) : il vaut mieux choisir Lycée.
%
%\smallskip
%
%Si on lance le programme précédent, rien ne s’affiche car aucun \textbf{affichage} n’est demandé !
}

\espacepara

\illustr{
\begin{center}
	\includegraphics[width=\linewidth]{graphics/tp01_edupython}
\end{center}
}

\espacetitre

\section{Affichage, variables, saisie}

\subsection{Affiche avec print()}

\begin{pyt}
	from lycee import * # on charge tout le module lycee
	x3=7 # la variable x3 prend la valeur 7
	print("L'opposé de ",x3," est ",-x3)
	print("Le double de ",x3,end="")
	print(" est ",2*x3)
\end{pyt}

\algo{
\texttt{print} affiche la valeur numérique ou le texte qui suit.

\texttt{print(a,b)} affiche à la suite sans passer à la ligne les éléments a et b.

\texttt{print("Texte",var)} affiche le texte suivi de la valeur de la variable var.

\texttt{print(a,end="")} affiche l’élément a et ne passe pas à la ligne, le prochain affichage continuera sur cette ligne.
}

\newpage

\subsection{Variables}

\begin{pyt}
	# ALGORITHME 1
	from lycee import *
	a=2
	b=-5
	a,b=a+b,a-b
	print("maintenant a=",a," et b=",b)
\end{pyt}

\begin{pyt}
	# ALGORITHME 2
	from lycee import *
	a=2
	b=-5
	a=a+b
	b=a-b
	print("pour finir a=",a," et b=",b)
\end{pyt}

\algo{
Compléter les deux tableaux suivants et donner l'affichage respectif des lignes 5 et 6 : \espacetab
\begin{multicols}{2}
	\begin{center}
		\begin{tabularx}{4cm}{|c|Y|Y|}
			\hline
			Ligne & a & b \\ \hline
			L3 & \dots & \dots \\ \hline
			L4 & \dots & \dots \\ \hline
			L5 & \dots & \dots \\ \hline
		\end{tabularx}
	
		\vfill
	
		Affichage L6 : \dots\dots\dots\dots\dots\dots\dots
		
		\columnbreak
	
		\begin{tabularx}{4cm}{|c|Y|Y|}
			\hline
			Ligne & a & b \\ \hline
			L3 & \dots & \dots \\ \hline
			L4 & \dots & \dots \\ \hline
			L5 & \dots & \dots \\ \hline
			L6 & \dots & \dots \\ \hline
		\end{tabularx}
	
		\medskip
		
		\vfill
		
		Affichage L7 : \dots\dots\dots\dots\dots\dots\dots
	\end{center}	
\end{multicols}
}

\espacepara

\rmq{
Notez la \textbf{différence} entre les résultats. Dans l’exemple de gauche ci-dessus, les valeurs de $a$ et $b$ sont affectées \textit{simultanément} en utilisant les valeurs des lignes précédentes.

En revanche dans celui de droite, les affectations sont \textit{successives}, ce qui explique les résultats différents.

\smallskip

Ainsi \texttt{a,b = b,a} échange les valeurs des deux variables $a$ et $b$ (sans utilisation d’une variable \textit{tampon}).
}

\espacetitre

\subsection{Input() et demande()}

\algo{
Avec le module lycee, l’instruction \texttt{var=demande(question)} affiche une fenêtre où figure le texte \textit{question} et un cadre blanc dans lequel on entrera ce qui est demandé.

La réponse est alors affectée à la variable \textit{var} qui est alors considérée comme un nombre, contrairement à la fonction input, dont la syntaxe est similaire \texttt{nom=input(question)} mais qui renvoit une chaîne de caractères.
}

\espacepara

\exercice{
Corrigez le programme suivant afin qu'il fonctionne
}

\begin{pyt}
	from lycee import *
	nom=input("Bonjour, quel est votre prénom ?")
	var=input("Entrez un nombre : ")
	print("Merci ",nom,". L'image de ",var," par la fonction carrée est ",var*var) 
\end{pyt}

\subsection{Les fonctions}

\begin{pyt}
	from lycee import *
	x=demande("Donnez une valeur de x") # affichage de la boîte de dialogue
	def f(x) :
		return x*x-x+41 # la formule de la fonction f
	print(f(x)) # l'affichage de l'image calculée
\end{pyt}

\algo{
\texttt{def nom\_fonction(paramètres) :} définit une nouvelle fonction, les deux points entrainent une indentation délimitant la déclaration de la fonction.

Les paramètres peuvent être appelés les \textbf{arguments}.

Le bloc peut servir à effectuer une série d’actions, mais le plus souvent il se termine par \texttt{return} pour renvoyer une ou plusieurs valeurs.

\smallskip

Le programme ci-dessus affiche l’image de la variable demandée par la fonction $f(x) = x^2 -x +41$.

Pour le programme de 2GT, il se présenterait d'ailleurs plus naturellement sous la forme qui suit  (programmation fonctionnelle pure) que l'on utilise directement via \texttt{f(\dots)} !
}

\begin{pyt}
	from lycee import *
	def f(x) :
		return x*x-x+41
\end{pyt}

\espacetitre

\section{Votre première fonction \og utile \fg{} !}

\subsection{But}

\cadre[ et rappels]{
On se donne deux points $A \coordpl{x_A}{y_A}$ et $B \coordpl{x_B}{y_B}$.

\begin{enumerate}
	\item Rappeler la formule permettant de calculer la longueur AB.
	\item Calculer (à la main) la longueur AB avec $A \coordpl{-1}{5}$ et $B \coordpl{3}{4}$.
\end{enumerate}
}

\espacepara

\subsection{En Python}

\algo{
Proposer un algorithme (en notation fonctionnelle) Python prenant comme arguments les coordonnées des deux points et en donnant en sortie (affichage) la distance entre ces deux points.
}

\begin{pyt}
	from lycee import *
	def longueur(...............) : # combien de paramètres ?
		print(" La longueur vaut ",end="")
		return ............................................. # la formule !
\end{pyt}

\illustr{
\begin{center}
	\includegraphics{graphics/tp03_python_longueur}
\end{center}

}

\end{document}