
    




    
\documentclass[11pt]{article}

    
    \usepackage[breakable]{tcolorbox}
    \tcbset{nobeforeafter} % prevents tcolorboxes being placing in paragraphs
    \usepackage{float}
    \floatplacement{figure}{H} % forces figures to be placed at the correct location
    
    \usepackage[T1]{fontenc}
    % Nicer default font (+ math font) than Computer Modern for most use cases
    \usepackage{mathpazo}

    % Basic figure setup, for now with no caption control since it's done
    % automatically by Pandoc (which extracts ![](path) syntax from Markdown).
    \usepackage{graphicx}
    % We will generate all images so they have a width \maxwidth. This means
    % that they will get their normal width if they fit onto the page, but
    % are scaled down if they would overflow the margins.
    \makeatletter
    \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
    \else\Gin@nat@width\fi}
    \makeatother
    \let\Oldincludegraphics\includegraphics
    % Set max figure width to be 80% of text width, for now hardcoded.
    \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=.8\maxwidth]{#1}}
    % Ensure that by default, figures have no caption (until we provide a
    % proper Figure object with a Caption API and a way to capture that
    % in the conversion process - todo).
    \usepackage{caption}
    \DeclareCaptionLabelFormat{nolabel}{}
    \captionsetup{labelformat=nolabel}

    \usepackage{adjustbox} % Used to constrain images to a maximum size 
    \usepackage{xcolor} % Allow colors to be defined
    \usepackage{enumerate} % Needed for markdown enumerations to work
    \usepackage{geometry} % Used to adjust the document margins
    \usepackage{amsmath} % Equations
    \usepackage{amssymb} % Equations
    \usepackage{textcomp} % defines textquotesingle
    % Hack from http://tex.stackexchange.com/a/47451/13684:
    \AtBeginDocument{%
        \def\PYZsq{\textquotesingle}% Upright quotes in Pygmentized code
    }
    \usepackage{upquote} % Upright quotes for verbatim code
    \usepackage{eurosym} % defines \euro
    \usepackage[mathletters]{ucs} % Extended unicode (utf-8) support
    \usepackage[utf8x]{inputenc} % Allow utf-8 characters in the tex document
    \usepackage{fancyvrb} % verbatim replacement that allows latex
    \usepackage{grffile} % extends the file name processing of package graphics 
                         % to support a larger range 
    % The hyperref package gives us a pdf with properly built
    % internal navigation ('pdf bookmarks' for the table of contents,
    % internal cross-reference links, web links for URLs, etc.)
    \usepackage{hyperref}
    \usepackage{longtable} % longtable support required by pandoc >1.10
    \usepackage{booktabs}  % table support for pandoc > 1.12.2
    \usepackage[inline]{enumitem} % IRkernel/repr support (it uses the enumerate* environment)
    \usepackage[normalem]{ulem} % ulem is needed to support strikethroughs (\sout)
                                % normalem makes italics be italics, not underlines
    \usepackage{mathrsfs}
    

    
    % Colors for the hyperref package
    \definecolor{urlcolor}{rgb}{0,.145,.698}
    \definecolor{linkcolor}{rgb}{.71,0.21,0.01}
    \definecolor{citecolor}{rgb}{.12,.54,.11}

    % ANSI colors
    \definecolor{ansi-black}{HTML}{3E424D}
    \definecolor{ansi-black-intense}{HTML}{282C36}
    \definecolor{ansi-red}{HTML}{E75C58}
    \definecolor{ansi-red-intense}{HTML}{B22B31}
    \definecolor{ansi-green}{HTML}{00A250}
    \definecolor{ansi-green-intense}{HTML}{007427}
    \definecolor{ansi-yellow}{HTML}{DDB62B}
    \definecolor{ansi-yellow-intense}{HTML}{B27D12}
    \definecolor{ansi-blue}{HTML}{208FFB}
    \definecolor{ansi-blue-intense}{HTML}{0065CA}
    \definecolor{ansi-magenta}{HTML}{D160C4}
    \definecolor{ansi-magenta-intense}{HTML}{A03196}
    \definecolor{ansi-cyan}{HTML}{60C6C8}
    \definecolor{ansi-cyan-intense}{HTML}{258F8F}
    \definecolor{ansi-white}{HTML}{C5C1B4}
    \definecolor{ansi-white-intense}{HTML}{A1A6B2}
    \definecolor{ansi-default-inverse-fg}{HTML}{FFFFFF}
    \definecolor{ansi-default-inverse-bg}{HTML}{000000}

    % commands and environments needed by pandoc snippets
    % extracted from the output of `pandoc -s`
    \providecommand{\tightlist}{%
      \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
    \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
    % Add ',fontsize=\small' for more characters per line
    \newenvironment{Shaded}{}{}
    \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
    \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}}
    \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
    \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
    \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
    \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}}
    \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}}
    \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
    \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}}
    \newcommand{\RegionMarkerTok}[1]{{#1}}
    \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
    \newcommand{\NormalTok}[1]{{#1}}
    
    % Additional commands for more recent versions of Pandoc
    \newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{{#1}}}
    \newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    \newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    \newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{{#1}}}
    \newcommand{\ImportTok}[1]{{#1}}
    \newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{{#1}}}}
    \newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    \newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    \newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{{#1}}}
    \newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
    \newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{{#1}}}
    \newcommand{\BuiltInTok}[1]{{#1}}
    \newcommand{\ExtensionTok}[1]{{#1}}
    \newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{{#1}}}
    \newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{{#1}}}
    \newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    \newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    
    
    % Define a nice break command that doesn't care if a line doesn't already
    % exist.
    \def\br{\hspace*{\fill} \\* }
    % Math Jax compatibility definitions
    \def\gt{>}
    \def\lt{<}
    \let\Oldtex\TeX
    \let\Oldlatex\LaTeX
    \renewcommand{\TeX}{\textrm{\Oldtex}}
    \renewcommand{\LaTeX}{\textrm{\Oldlatex}}
    % Document parameters
    % Document title
    \title{chapitre10\_boucles\_imbriquees}
    
    
    
    
    
% Pygments definitions
\makeatletter
\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax%
    \let\PY@ul=\relax \let\PY@tc=\relax%
    \let\PY@bc=\relax \let\PY@ff=\relax}
\def\PY@tok#1{\csname PY@tok@#1\endcsname}
\def\PY@toks#1+{\ifx\relax#1\empty\else%
    \PY@tok{#1}\expandafter\PY@toks\fi}
\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{%
    \PY@it{\PY@bf{\PY@ff{#1}}}}}}}
\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}}

\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}}
\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}}
\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}}
\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}}
\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}}
\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}}
\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}}
\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}}
\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit}
\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf}
\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}}
\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}}
\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}
\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
\expandafter\def\csname PY@tok@fm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@vm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
\expandafter\def\csname PY@tok@sa\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@dl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\expandafter\def\csname PY@tok@ch\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@cpf\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}

\def\PYZbs{\char`\\}
\def\PYZus{\char`\_}
\def\PYZob{\char`\{}
\def\PYZcb{\char`\}}
\def\PYZca{\char`\^}
\def\PYZam{\char`\&}
\def\PYZlt{\char`\<}
\def\PYZgt{\char`\>}
\def\PYZsh{\char`\#}
\def\PYZpc{\char`\%}
\def\PYZdl{\char`\$}
\def\PYZhy{\char`\-}
\def\PYZsq{\char`\'}
\def\PYZdq{\char`\"}
\def\PYZti{\char`\~}
% for compatibility with earlier versions
\def\PYZat{@}
\def\PYZlb{[}
\def\PYZrb{]}
\makeatother


    % For linebreaks inside Verbatim environment from package fancyvrb. 
    \makeatletter
        \newbox\Wrappedcontinuationbox 
        \newbox\Wrappedvisiblespacebox 
        \newcommand*\Wrappedvisiblespace {\textcolor{red}{\textvisiblespace}} 
        \newcommand*\Wrappedcontinuationsymbol {\textcolor{red}{\llap{\tiny$\m@th\hookrightarrow$}}} 
        \newcommand*\Wrappedcontinuationindent {3ex } 
        \newcommand*\Wrappedafterbreak {\kern\Wrappedcontinuationindent\copy\Wrappedcontinuationbox} 
        % Take advantage of the already applied Pygments mark-up to insert 
        % potential linebreaks for TeX processing. 
        %        {, <, #, %, $, ' and ": go to next line. 
        %        _, }, ^, &, >, - and ~: stay at end of broken line. 
        % Use of \textquotesingle for straight quote. 
        \newcommand*\Wrappedbreaksatspecials {% 
            \def\PYGZus{\discretionary{\char`\_}{\Wrappedafterbreak}{\char`\_}}% 
            \def\PYGZob{\discretionary{}{\Wrappedafterbreak\char`\{}{\char`\{}}% 
            \def\PYGZcb{\discretionary{\char`\}}{\Wrappedafterbreak}{\char`\}}}% 
            \def\PYGZca{\discretionary{\char`\^}{\Wrappedafterbreak}{\char`\^}}% 
            \def\PYGZam{\discretionary{\char`\&}{\Wrappedafterbreak}{\char`\&}}% 
            \def\PYGZlt{\discretionary{}{\Wrappedafterbreak\char`\<}{\char`\<}}% 
            \def\PYGZgt{\discretionary{\char`\>}{\Wrappedafterbreak}{\char`\>}}% 
            \def\PYGZsh{\discretionary{}{\Wrappedafterbreak\char`\#}{\char`\#}}% 
            \def\PYGZpc{\discretionary{}{\Wrappedafterbreak\char`\%}{\char`\%}}% 
            \def\PYGZdl{\discretionary{}{\Wrappedafterbreak\char`\$}{\char`\$}}% 
            \def\PYGZhy{\discretionary{\char`\-}{\Wrappedafterbreak}{\char`\-}}% 
            \def\PYGZsq{\discretionary{}{\Wrappedafterbreak\textquotesingle}{\textquotesingle}}% 
            \def\PYGZdq{\discretionary{}{\Wrappedafterbreak\char`\"}{\char`\"}}% 
            \def\PYGZti{\discretionary{\char`\~}{\Wrappedafterbreak}{\char`\~}}% 
        } 
        % Some characters . , ; ? ! / are not pygmentized. 
        % This macro makes them "active" and they will insert potential linebreaks 
        \newcommand*\Wrappedbreaksatpunct {% 
            \lccode`\~`\.\lowercase{\def~}{\discretionary{\hbox{\char`\.}}{\Wrappedafterbreak}{\hbox{\char`\.}}}% 
            \lccode`\~`\,\lowercase{\def~}{\discretionary{\hbox{\char`\,}}{\Wrappedafterbreak}{\hbox{\char`\,}}}% 
            \lccode`\~`\;\lowercase{\def~}{\discretionary{\hbox{\char`\;}}{\Wrappedafterbreak}{\hbox{\char`\;}}}% 
            \lccode`\~`\:\lowercase{\def~}{\discretionary{\hbox{\char`\:}}{\Wrappedafterbreak}{\hbox{\char`\:}}}% 
            \lccode`\~`\?\lowercase{\def~}{\discretionary{\hbox{\char`\?}}{\Wrappedafterbreak}{\hbox{\char`\?}}}% 
            \lccode`\~`\!\lowercase{\def~}{\discretionary{\hbox{\char`\!}}{\Wrappedafterbreak}{\hbox{\char`\!}}}% 
            \lccode`\~`\/\lowercase{\def~}{\discretionary{\hbox{\char`\/}}{\Wrappedafterbreak}{\hbox{\char`\/}}}% 
            \catcode`\.\active
            \catcode`\,\active 
            \catcode`\;\active
            \catcode`\:\active
            \catcode`\?\active
            \catcode`\!\active
            \catcode`\/\active 
            \lccode`\~`\~ 	
        }
    \makeatother

    \let\OriginalVerbatim=\Verbatim
    \makeatletter
    \renewcommand{\Verbatim}[1][1]{%
        %\parskip\z@skip
        \sbox\Wrappedcontinuationbox {\Wrappedcontinuationsymbol}%
        \sbox\Wrappedvisiblespacebox {\FV@SetupFont\Wrappedvisiblespace}%
        \def\FancyVerbFormatLine ##1{\hsize\linewidth
            \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
                \doublehyphendemerits\z@\finalhyphendemerits\z@
                \strut ##1\strut}%
        }%
        % If the linebreak is at a space, the latter will be displayed as visible
        % space at end of first line, and a continuation symbol starts next line.
        % Stretch/shrink are however usually zero for typewriter font.
        \def\FV@Space {%
            \nobreak\hskip\z@ plus\fontdimen3\font minus\fontdimen4\font
            \discretionary{\copy\Wrappedvisiblespacebox}{\Wrappedafterbreak}
            {\kern\fontdimen2\font}%
        }%
        
        % Allow breaks at special characters using \PYG... macros.
        \Wrappedbreaksatspecials
        % Breaks at punctuation characters . , ; ? ! and / need catcode=\active 	
        \OriginalVerbatim[#1,codes*=\Wrappedbreaksatpunct]%
    }
    \makeatother

    % Exact colors from NB
    \definecolor{incolor}{HTML}{303F9F}
    \definecolor{outcolor}{HTML}{D84315}
    \definecolor{cellborder}{HTML}{CFCFCF}
    \definecolor{cellbackground}{HTML}{F7F7F7}
    
    % prompt
    \newcommand{\prompt}[4]{
        \llap{{\color{#2}[#3]: #4}}\vspace{-1.25em}
    }
    

    
    % Prevent overflowing lines due to hard-to-break entities
    \sloppy 
    % Setup hyperref package
    \hypersetup{
      breaklinks=true,  % so long urls are correctly broken across lines
      colorlinks=true,
      urlcolor=urlcolor,
      linkcolor=linkcolor,
      citecolor=citecolor,
      }
    % Slightly bigger margins than the latex defaults
    
    \geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
    
    

    \begin{document}
    
    
    \maketitle
    
    

    
    \#

Chapitre 10 : les boucles imbriquées

    Le but de ce chapitre est d'apprendre à analyser un problème contenant
des répétitions imbriquées et à utiliser des boucles imbriquées pour
traiter ces configurations.

    \hypertarget{petit-compluxe9ment-sur-les-boucles-simples}{%
\subsection{Petit complément sur les boucles
simples}\label{petit-compluxe9ment-sur-les-boucles-simples}}

    D'un point de vue algorithmique on peut distinguer deux types de boucles
simples :

\begin{itemize}
\tightlist
\item
  les \textbf{boucles incrémentées à pas constant} qu'on peut aussi
  appeler \textbf{boucles avec itérateur numérique}.
\end{itemize}

Ce type de boucle est utilisé lorsque le \textbf{nombre d'itération(s)
est connu (ou calculé)} à l'avance, c'est-à-dire avant l'entrée dans la
boucle.

Elle s'écrit de la manière suivante :

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{Instructions_ini }\CommentTok{# initialisation d'un itérateur numérique entier                  }
\ControlFlowTok{while}\NormalTok{ (condition): }\CommentTok{#                 }
\NormalTok{  Instruction }\DecValTok{1}                    
\NormalTok{  Instruction }\DecValTok{2}                    
\NormalTok{  ...                              }
\NormalTok{  Instruction n    }
\NormalTok{  Instructions_Incr }\CommentTok{# incrémentation de l'itérateur}
\NormalTok{Instruction n}\OperatorTok{+}\DecValTok{1}                    
\end{Highlighting}
\end{Shaded}

\begin{itemize}
\item
  La condition d'arrêt porte généralement sur la variable entière
  correspondant à l'itérateur. On teste souvent si la variable est
  inférieure ou supérieure à une borne (la limite).
\item
  L'itérateur doit être initialisé avant l'entrée dans la boucle.
\end{itemize}

L'incrémentation de l'itérateur peut prendre plusieurs formes. Il est
possible d'opérer des décréments plutôt que des incréments. Il est aussi
possible d'incrémenter par des pas différents de \texttt{1}.

Exemple :

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{n}{it} \PY{o}{=} \PY{l+m+mi}{1}
\PY{n}{borne}\PY{o}{=}\PY{l+m+mi}{11}
\PY{k}{while} \PY{n}{it}\PY{o}{\PYZlt{}}\PY{n}{borne} \PY{p}{:}
    \PY{n+nb}{print}\PY{p}{(}\PY{n}{it}\PY{p}{)}
    \PY{n}{it}\PY{o}{+}\PY{o}{=}\PY{l+m+mi}{2}
    
    
\PY{n}{it}\PY{o}{=}\PY{l+m+mi}{9}
\PY{n}{borne}\PY{o}{=}\PY{l+m+mi}{0}
\PY{k}{while} \PY{n}{it}\PY{o}{\PYZgt{}}\PY{n}{borne} \PY{p}{:}
    \PY{n+nb}{print}\PY{p}{(}\PY{n}{it}\PY{p}{)}
    \PY{n}{it}\PY{o}{\PYZhy{}}\PY{o}{=}\PY{l+m+mi}{2}
\end{Verbatim}
\end{tcolorbox}

    Ce type de boucle est par exemple utile pour parcourir un tableau.

    \begin{itemize}
\tightlist
\item
  les autres boucles parfois appelés \emph{boucles conditionnelles} ont
  une condition d'arrêt booléenne plus générale et le \textbf{nombre
  d'itérations n'est pas connu à l'avance (il peut être de 0)}. Par
  exemple :
\end{itemize}

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{1}{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{n+nb}{print}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{entrez oui ou non}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
\PY{n}{choix}\PY{o}{=}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}
\PY{k}{while} \PY{n}{choix}\PY{o}{!=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{oui}\PY{l+s+s1}{\PYZsq{}} \PY{o+ow}{and} \PY{n}{choix}\PY{o}{!=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{non}\PY{l+s+s1}{\PYZsq{}} \PY{p}{:}
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{entrez oui ou non}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    \PY{n}{choix}\PY{o}{=}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}
\PY{n+nb}{print}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Vous avez choisi }\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{n}{choix}\PY{p}{)}
\end{Verbatim}
\end{tcolorbox}

    \begin{Verbatim}[commandchars=\\\{\}]
entrez oui ou non
h
entrez oui ou non
oui
Vous avez choisi  oui
\end{Verbatim}

    Toute boucle qu'elle soit avec itérateur numérique ou conditionnelle,
peut être codée au moyen d'un \texttt{while}. C'est ce qui sera fait
dans ce cours. Certains langages proposent une syntaxe pour les boucles
avec itérateur numérique : ce sont les boucles \texttt{for} qu'on trouve
par exemple avec le langage C.

    \hypertarget{les-boucles-imbriquuxe9es}{%
\subsection{Les boucles imbriquées}\label{les-boucles-imbriquuxe9es}}

    \begin{itemize}
\tightlist
\item
  On dit que deux boucles sont \emph{imbriquées} si \textbf{l'une est
  contenue dans le bloc d'instructions de l'autre}.
\item
  Certains algorithmes nécessitent d'avoir une imbrication de boucles.
  \textgreater{}C'est le cas si l'on souhaite par exemple afficher
  toutes les tables de multiplications de \texttt{1} à \texttt{10}. En
  effet, \textgreater{}* l'affichage de la table de multiplication d'un
  nombre, par exemple la table de multiplication de \texttt{7},
  nécessite une boucle ; \textgreater{}* de plus, il faut afficher la
  table de multiplication pour chaque nombre entre \texttt{1} et
  \texttt{10}, ce qui nécessite une deuxième boucle contenant la
  première.
\end{itemize}

    \hypertarget{premier-exemple}{%
\subsubsection{Premier exemple}\label{premier-exemple}}

Il s'agit d'afficher les tables de multiplication pour tous les nombres
entre \texttt{1} et \texttt{10} inclus. Chaque table se présentera comme
suit :

\texttt{TABLE\ de\ 4\ \ 4\ *\ 1\ =\ 4\ \ 4\ *\ 2\ =\ 8\ \ 4\ *\ 3\ =\ 12\ \ 4\ *\ 4\ =\ 16\ \ 4\ *\ 5\ =\ 20\ \ 4\ *\ 6\ =\ 24\ \ 4\ *\ 7\ =\ 28\ \ 4\ *\ 8\ =\ 32\ \ 4\ *\ 9\ =\ 36\ \ 4\ *\ 10\ =\ 40}

Comme très souvent, plutôt que d'essayer d'écrire directement le détail
du programme, il peut être préférable de procéder par étape. Par
exemple, nous pouvons dire que, globalement, notre programme doit écrire
les \texttt{10} tables de multiplication de \texttt{1} à \texttt{10} et
qu'il doit donc se présenter ainsi :

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{i}\OperatorTok{=}\DecValTok{1}
\ControlFlowTok{while}\NormalTok{ i}\OperatorTok{<=}\DecValTok{10}\NormalTok{ :}
           \CommentTok{# écrire la table de i}
\NormalTok{   i}\OperatorTok{+=}\DecValTok{1}
\end{Highlighting}
\end{Shaded}

Pour écrire la table du nombre \texttt{i}, nous pouvons procéder ainsi :

\begin{Shaded}
\begin{Highlighting}[]
\BuiltInTok{print}\NormalTok{(}\StringTok{"}\CharTok{\textbackslash{}n\textbackslash{}n}\StringTok{TABLE de "}\NormalTok{, i, }\StringTok{'}\CharTok{\textbackslash{}n}\StringTok{'}\NormalTok{)}
\NormalTok{j}\OperatorTok{=}\DecValTok{1}
\ControlFlowTok{while}\NormalTok{ j}\OperatorTok{<=}\DecValTok{10}\NormalTok{ : }\CommentTok{#Pour chaque nombre j variant de 1 à 10}
    \BuiltInTok{print}\NormalTok{(i, }\StringTok{" * "}\NormalTok{, j, }\StringTok{" = "}\NormalTok{, i}\OperatorTok{*}\NormalTok{j)}
\NormalTok{    j}\OperatorTok{+=}\DecValTok{1}
\end{Highlighting}
\end{Shaded}

En insérant dans la boucle \texttt{while} principale le code permettant
l'écriture de la table de multiplication, nous obtenons le code complet
suivant :

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{n}{i}\PY{o}{=}\PY{l+m+mi}{1}
\PY{k}{while}  \PY{n}{i}\PY{o}{\PYZlt{}}\PY{o}{=}\PY{l+m+mi}{10} \PY{p}{:}
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{TABLE de }\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{i}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    \PY{n}{j}\PY{o}{=}\PY{l+m+mi}{1}
    \PY{k}{while} \PY{n}{j}\PY{o}{\PYZlt{}}\PY{o}{=}\PY{l+m+mi}{10} \PY{p}{:} \PY{c+c1}{\PYZsh{}Pour chaque nombre j variant de 1 à 10}
        \PY{n+nb}{print}\PY{p}{(}\PY{n}{i}\PY{p}{,} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{ * }\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{j}\PY{p}{,} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{ = }\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{i}\PY{o}{*}\PY{n}{j}\PY{p}{)}
        \PY{n}{j}\PY{o}{+}\PY{o}{=}\PY{l+m+mi}{1}
    \PY{n}{i}\PY{o}{+}\PY{o}{=}\PY{l+m+mi}{1}
\end{Verbatim}
\end{tcolorbox}

    Remarque : On peut remplacer l'écriture de boucles imbriquées par
l'appel de fonction. Par exemple, si l'on définit la fonction
\texttt{tableMult} permettant d'écrire la table de multiplication d'un
nombre \texttt{i}, l'algorithme devient :

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{k}{def} \PY{n+nf}{tableMult}\PY{p}{(}\PY{n}{i}\PY{p}{)} \PY{p}{:}
    \PY{l+s+sd}{\PYZdq{}\PYZdq{}\PYZdq{} Affiche la table de multiplication de i \PYZdq{}\PYZdq{}\PYZdq{}}
    \PY{n}{j}\PY{o}{=}\PY{l+m+mi}{1}
    \PY{k}{while} \PY{n}{j}\PY{o}{\PYZlt{}}\PY{o}{=}\PY{l+m+mi}{10} \PY{p}{:} \PY{c+c1}{\PYZsh{}Pour chaque nombre j variant de 1 à 10}
        \PY{n+nb}{print}\PY{p}{(}\PY{n}{i}\PY{p}{,} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{ * }\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{j}\PY{p}{,} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{ = }\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{i}\PY{o}{*}\PY{n}{j}\PY{p}{)}
        \PY{n}{j}\PY{o}{+}\PY{o}{=}\PY{l+m+mi}{1} 
        
\PY{c+c1}{\PYZsh{} algo principal     }
\PY{n}{i}\PY{o}{=}\PY{l+m+mi}{1}
\PY{k}{while}  \PY{n}{i}\PY{o}{\PYZlt{}}\PY{o}{=}\PY{l+m+mi}{10} \PY{p}{:}
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{Table de }\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{i}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    \PY{n}{tableMult}\PY{p}{(}\PY{n}{i}\PY{p}{)}
    \PY{n}{i}\PY{o}{+}\PY{o}{=}\PY{l+m+mi}{1}
\end{Verbatim}
\end{tcolorbox}

    La fonction \texttt{tableMult} contenant une boucle, il y a bien
imbrication de boucles pour l'ordinateur mais le fait de transférer la
boucle correspondant à l'écriture de la table de multiplication de
l'entier \texttt{i} dans la fonction \texttt{tableMult} permet, lors de
l'écriture de l'algorithme, de n'écrire qu'une simple boucle, \textbf{le
programme est plus lisible}. - Sur ce thème : \textbf{Exercice 1 et 3 du
TD}

    \hypertarget{deuxiuxe8me-exemple}{%
\subsubsection{Deuxième exemple}\label{deuxiuxe8me-exemple}}

On souhaite écrire un programme permettant de jouer au nombre magique.
Voici le déroulement d'une partie : 1. l'ordinateur choisit un nombre
aléatoire entre \texttt{1} et \texttt{100} inclus ; 2. le joueur a
\texttt{10} tentatives pour déterminer ce nombre. À chaque tentative, si
le nombre saisi par le joueur n'est pas le nombre aléatoire choisi par
l'ordinateur, le programme indique si le nombre proposé par le joueur
est plus petit ou plus grand que le nombre aléatoire.

On souhaite que le programme permette de jouer plusieurs fois de suite à
ce jeu. Ainsi, après chaque partie, l'ordinateur demande à l'utilisateur
s'il veut rejouer. Le programme s'arrête dès que le joueur ne veut plus
jouer.

Pour réaliser un tel programme, il faut d'abord déterminer le code
permettant de jouer au nombre magique. On a donc un nombre choisi
aléatoirement et une boucle qui demande à l'utilisateur de saisir un
nombre puis indiquant si celui-ci est plus petit ou plus grand que le
nombre magique, et ce jusqu'à ce que l'utilisateur ait effectué
\texttt{10} tentatives ou trouvé le nombre magique.

Un exemple de code est le suivant.

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{k+kn}{from} \PY{n+nn}{random} \PY{k}{import} \PY{o}{*}
\PY{n}{nombreAleatoire} \PY{o}{=} \PY{n}{randint}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{100}\PY{p}{)}
\PY{n}{tentative} \PY{o}{=} \PY{l+m+mi}{0}
\PY{n}{nombre} \PY{o}{=} \PY{o}{\PYZhy{}}\PY{l+m+mi}{1}

\PY{k}{while} \PY{n}{nombre} \PY{o}{!=}  \PY{n}{nombreAleatoire} \PY{o+ow}{and} \PY{n}{tentative} \PY{o}{\PYZlt{}} \PY{l+m+mi}{10} \PY{p}{:}
    \PY{n}{tentative}\PY{o}{=}\PY{o}{+}\PY{l+m+mi}{1}
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Saisissez un nombre : }\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{n}{nombre}\PY{o}{=}\PY{n+nb}{int}\PY{p}{(}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}\PY{p}{)}
    \PY{k}{if} \PY{n}{nombre} \PY{o}{\PYZlt{}} \PY{n}{nombreAleatoire} \PY{p}{:}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Le nombre magique est plus grand}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{k}{elif} \PY{n}{nombre} \PY{o}{\PYZgt{}} \PY{n}{nombreAleatoire} \PY{p}{:}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Le nombre magique est plus petit}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}

\PY{k}{if} \PY{n}{nombre}\PY{o}{==}\PY{n}{nombreAleatoire} \PY{p}{:}
  \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Vous avez gagné}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
\PY{k}{else} \PY{p}{:}
  \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Vous avez perdu}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
\end{Verbatim}
\end{tcolorbox}

    Ce code doit être exécuté une première fois. Le programme doit ensuite
demander à l'utilisateur s'il souhaite rejouer une autre fois et ceci
doit se répéter tant que l'utilisateur saisit la lettre \texttt{O} pour
oui. Cette boucle est alors de la forme :

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{n}{rejoue}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{O}\PY{l+s+s2}{\PYZdq{}}
\PY{k}{while} \PY{n}{rejoue}\PY{o}{==}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{O}\PY{l+s+s2}{\PYZdq{}} \PY{p}{:}
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Nouvelle partie}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
  
    \PY{c+c1}{\PYZsh{}Code de la partie...}
  
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Voulez\PYZhy{}vous rejouer (O/N) ?}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{n}{rejoue}\PY{o}{=}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}
\end{Verbatim}
\end{tcolorbox}

    En insérant le code permettant de jouer à une partie, on obtient alors
le programme complet suivant :

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{k+kn}{from} \PY{n+nn}{random} \PY{k}{import} \PY{o}{*}

\PY{n}{rejoue}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{O}\PY{l+s+s2}{\PYZdq{}}
\PY{k}{while} \PY{n}{rejoue}\PY{o}{==}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{O}\PY{l+s+s2}{\PYZdq{}} \PY{p}{:}

    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Nouvelle partie}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    
    \PY{n}{nombreAleatoire} \PY{o}{=} \PY{n}{randint}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{100}\PY{p}{)}
    \PY{n}{tentative} \PY{o}{=} \PY{l+m+mi}{0}
    \PY{n}{nombre} \PY{o}{=} \PY{o}{\PYZhy{}}\PY{l+m+mi}{1} 
    \PY{k}{while} \PY{n}{nombre} \PY{o}{!=}  \PY{n}{nombreAleatoire} \PY{o+ow}{and} \PY{n}{tentative} \PY{o}{\PYZlt{}} \PY{l+m+mi}{10} \PY{p}{:}
        \PY{n}{tentative}\PY{o}{=}\PY{o}{+}\PY{l+m+mi}{1}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Saisissez un nombre : }\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
        \PY{n}{nombre}\PY{o}{=}\PY{n+nb}{int}\PY{p}{(}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}\PY{p}{)}
        \PY{k}{if} \PY{n}{nombre} \PY{o}{\PYZlt{}} \PY{n}{nombreAleatoire} \PY{p}{:}
            \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Le nombre magique est plus grand}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
        \PY{k}{elif} \PY{n}{nombre} \PY{o}{\PYZgt{}} \PY{n}{nombreAleatoire} \PY{p}{:}
            \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Le nombre magique est plus petit}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}

    \PY{k}{if} \PY{n}{nombre}\PY{o}{==}\PY{n}{nombreAleatoire} \PY{p}{:}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Vous avez gagné}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{k}{else} \PY{p}{:}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Vous avez perdu}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}    
  
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Voulez\PYZhy{}vous rejouer (O/N) ?}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{n}{rejoue}\PY{o}{=}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}
\end{Verbatim}
\end{tcolorbox}

    \textbf{Attention} : Il faut faire très attention à l'initialisation de
la boucle à l'intérieur. Pour chaque partie, il faut choisir un nombre
aléatoire et mettre le compteur de tentatives à 0. Autrement dit, les
instructions correspondantes (lignes 8 à 10) sont faites à l'intérieur
de la boucle \texttt{while} et non au début du programme !

Comme dans l'exemple précédent, il est possible d'encapsuler la boucle
d'une \emph{partie du jeu nombre magique} dans une fonction
\texttt{jouer\_partie\_nombre\_magique} :

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{k}{def} \PY{n+nf}{jouer\PYZus{}partie\PYZus{}nombre\PYZus{}magique}\PY{p}{(}\PY{p}{)} \PY{p}{:}
    \PY{l+s+sd}{\PYZdq{}\PYZdq{}\PYZdq{} Permet de jouer une partie du jeu nombre magique\PYZdq{}\PYZdq{}\PYZdq{}}
    \PY{n}{nombreAleatoire} \PY{o}{=} \PY{n}{randint}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{100}\PY{p}{)}
    \PY{n}{tentative} \PY{o}{=} \PY{l+m+mi}{0}
    \PY{n}{nombre} \PY{o}{=} \PY{o}{\PYZhy{}}\PY{l+m+mi}{1} 
    \PY{k}{while} \PY{n}{nombre} \PY{o}{!=}  \PY{n}{nombreAleatoire} \PY{o+ow}{and} \PY{n}{tentative} \PY{o}{\PYZlt{}} \PY{l+m+mi}{10} \PY{p}{:}
        \PY{n}{tentative}\PY{o}{=}\PY{o}{+}\PY{l+m+mi}{1}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Saisissez un nombre : }\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
        \PY{n}{nombre}\PY{o}{=}\PY{n+nb}{int}\PY{p}{(}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}\PY{p}{)}
        \PY{k}{if} \PY{n}{nombre} \PY{o}{\PYZlt{}} \PY{n}{nombreAleatoire} \PY{p}{:}
            \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Le nombre magique est plus grand}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
        \PY{k}{elif} \PY{n}{nombre} \PY{o}{\PYZgt{}} \PY{n}{nombreAleatoire} \PY{p}{:}
            \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Le nombre magique est plus petit}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}

    \PY{k}{if} \PY{n}{nombre}\PY{o}{==}\PY{n}{nombreAleatoire} \PY{p}{:}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Vous avez gagné}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{k}{else} \PY{p}{:}
        \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Vous avez perdu}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}    
\end{Verbatim}
\end{tcolorbox}

    L'algorithme final devient :

    \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
\prompt{In}{incolor}{ }{\hspace{4pt}}
\begin{Verbatim}[commandchars=\\\{\}]
\PY{k+kn}{from} \PY{n+nn}{random} \PY{k}{import} \PY{o}{*}

\PY{n}{rejoue}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{O}\PY{l+s+s2}{\PYZdq{}}
\PY{k}{while} \PY{n}{rejoue}\PY{o}{==}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{O}\PY{l+s+s2}{\PYZdq{}} \PY{p}{:}

    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Nouvelle partie}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{n}{jouer\PYZus{}partie\PYZus{}nombre\PYZus{}magique}\PY{p}{(}\PY{p}{)}
    \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Voulez\PYZhy{}vous rejouer (O/N) ?}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
    \PY{n}{rejoue}\PY{o}{=}\PY{n+nb}{input}\PY{p}{(}\PY{p}{)}
\end{Verbatim}
\end{tcolorbox}

    \begin{itemize}
\tightlist
\item
  Sur ce thème : \textbf{Exercice 2, 4 et 5 du TD}
\end{itemize}


    % Add a bibliography block to the postdoc
    
    
    
    \end{document}
