\documentclass[a4paper,10pt]{/media/documents/Cours/Prof/Enseignements/Archive/2012-2013/tools/style/classDS}

% Title Page
\title{Programmation en python:  Les fonctions}
\author{}
\date{6 juin 2013}

\fancyhead[L]{$2^{nd}$ : \Thetitle}

\begin{document}
\maketitle
\thispagestyle{fancy}

\section{Un pas de plus vers la feignantise}
À force d'écrire des programmes, les programmeurs en ont eu marre d'écrire toujours les mêmes choses et ont inventé les \textbf{fonctions}. Les fonctions sont quelques lignes de code qu'il est possible de réutiliser partout dans son programme. Voyons un exemple. 

Recopier et tester le programme suivant

\begin{verbatim}

def ditBonjour():
    print(``Je suis une fonction'')
    print(``Et je dis bonjour'')

ditBonjour()
ditBonjour()
ditBonjour()

\end{verbatim}

Dans ce programme, on a défini une fonction que l'on a appelé \texttt{ditBonjour}. Cette fonction écrira toujours les deux même lignes
\begin{verbatim}
Je suis une fonction
Et je dis bonjour
\end{verbatim}

\paragraph{Questions:}
\begin{itemize}
	\item Que ce passe-t-il? Pourquoi a-t-on trois fois le même message?
			\vspace{3cm}
	\item Que se passe-t-il si l'on enlève ou que l'on ajoute un des \texttt{ditBonjour()}?
			\vspace{3cm}
	\item Écrire, après la fonction \texttt{ditBonjour}, une fonction \texttt{ditAuRevoir} qui affiche un message d'au revoir. Recopier cette fonction ici.
			\vspace{3cm}
\end{itemize}

\begin{Exo}
		En utilisant ce que l'on avait fait lors des premières séances, écrire une fonction \texttt{tonNom} qui demande le nom de l'utilisateur (rappelez vous de \texttt{input}) et qui salue l'utilisateur.
\end{Exo}

\section{Mettre les fonctions au travail}
Pour le moment, nos fonctions ne sont capables de faire qu'une seule chose. Elles ne sont pas capables de s'adapter. On va voir que l'on peut donner des informations aux fonctions.

Recopier et tester le programme suivant
\begin{verbatim}
def ditBonjourA(nom):
    print(``Je suis une fonction'')
    print(``Mais je suis plus forte que la fonction ditBonjour'')
    print(``Et je dis bonjours a'', nom)

ditBonjourA(``bob'')
ditBonjourA(``Julie'')
ditBonjourA(``Monsieur'')

\end{verbatim}
\paragraph{Questions:}
\begin{itemize}
		\item Pourquoi n'a-t-on pas 3 fois le même message?
				\vspace{3cm}
		\item Ajouter une ligne pour dire bonjour à \textbf{Madame}.
		\item Écrire, après la fonction \texttt{ditBonjourA}, une fonction \texttt{ditAuRevoirA} qui affiche un message d'au revoir en s'adaptant à un \texttt{nom}. Recopier cette fonction ici.
				\vspace{3cm}
\end{itemize}


Une fonction peut prendre plusieurs arguments. Pour cela il faut les séparer par une virgule.
\begin{verbatim}
def ajoute(a,b):
    return a + b

def ecrit(mot, a):
    return(mot*a)

print(ajoute(2,3))
print(ajoute(-62,89))
print(ajoute(-1, 0))
print(ajoute(1,2) - 3)

print(ecrit(``bonjour'', 10))
print(ecrit(``plop'', 4))
\end{verbatim}

\paragraph{Questions:}
\begin{itemize}
		\item Que fait la fonction \texttt{ajoute}?
				\vspace{3cm}
		\item Que fait la fonction \texttt{ecrit}?
				\vspace{3cm}
		\item Que se passe-t-il dans la ligne \texttt{print(ajoute(1,2) - 3)}?
				\vspace{3cm}
\end{itemize}

\paragraph{Remarque:} Depuis de début, on utilise des fonctions comme par exemple la \texttt{print} qui affiche des mots à l'écran ou la fonction \texttt{input} qui demande des informations à l'utilisateur.

\begin{Exo}
		Écrire une fonction \texttt{divise} divise \texttt{a} par \texttt{b}.
\end{Exo}

\begin{Exo}(Dure) \\
		Écrire une fonction \texttt{bonChoix} qui prend pour \textit{argument} un \texttt{choix} (0 ou 1), qui tire au hasard un \texttt{bonChoix} entre 1 et 2 (utilise \texttt{randint(0,1)}) et affiche un message de victoire si le \texttt{choix} est le même que \texttt{bonChoix} et un message de defaite sinon.
\end{Exo}

\section{Jeu du Dragon}
Dans le jeu suivant, le joueur est dans une contrée remplie de dragons. Les dragons vivent dans des grandes grottes remplies de trésors. Ils défendent leur trésors et n'hésitent pas à manger les aventuriers qui s'approcheraient. Le joueur va se trouver face à deux grottes une avec un dragon féroce et une autre où le dragon est parti à la chasse. Le joueur va devoir choisir la bonne grotte pour ne pas se faire manger.

Voici le code permettant de jouer à ce jeu.

\begin{verbatim}
from random import *
from time import sleep


# Les fonctions


def introduction():
    ''''''   ''''''
    print(``Vous ètes dans une contrée remplie de dragons. Face à vous se trouvent deux grottes.'')
    print(``L'une est défendu par un dragon qui vous mangera'')
    print(``L'autre est remplie d'un trésor inestimable'')
    print()

def choisir():
    ''''''   ''''''
    cave = ''
    while cave != '1' or cave != '2':
        print(``Quelle cave choisissez vous?'')
        cave = input()

    return cave

def bonneCave(cave):
    ''''''   ''''''
    print(``Vous vous approchez de la cave...'')
    sleep(2)
    print(``Il fait noir et humide...'')
    sleep(3)

    bonneCave = randint(0,1)

    if bonneCave == str(cave):
        print(``Vous tombez sur le trésor !!! Trop fort !!'')
    else:
        print(``Vous vous faites dévorer impitoyablement par le dragon... Pas de chance !'')



# Le jeu en lui même

jouerEncore = ``oui''
while jouerEncore ==  ``oui'':
    introduction()
    cave = choisir()
    bonneCave()
	print(``Voulez-vous enore jouer (oui/non) ?'')
	jouerEncore = input()

\end{verbatim}

\paragraph{Questions:}
\begin{itemize}
	\item Quelles sont les trois fonctions définies dans ce programme?
			\vspace{2cm}
	\item Pour chacune d'entre elles expliquer ce qu'elles font.
			\begin{itemize}
					\item 
					\item 
					\item 
			\end{itemize}
	\item Écrire la description entre les \texttt{'''''' ''''''} sous chaque fonction.
	\item Modifier le programme pour proposer non plus 2 grottes mais 3 grottes.
\end{itemize}


\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "master"
%%% End:

