<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
    




    
\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&gt;\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 &gt;1.10
    \usepackage{booktabs}  % table support for pandoc &gt; 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{&gt;}
    \def\lt{&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`\&amp;}
\def\PYZlt{\char`\&lt;}
\def\PYZgt{\char`\&gt;}
\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. 
        %        {, &lt;, #, %, $, ' and ": go to next line. 
        %        _, }, ^, &amp;, &gt;, - 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`\&amp;}{\Wrappedafterbreak}{\char`\&amp;}}% 
            \def\PYGZlt{\discretionary{}{\Wrappedafterbreak\char`\&lt;}{\char`\&lt;}}% 
            \def\PYGZgt{\discretionary{\char`\&gt;}{\Wrappedafterbreak}{\char`\&gt;}}% 
            \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 Ã&nbsp; analyser un problÃ¨me contenant
des rÃ©pÃ©titions imbriquÃ©es et Ã&nbsp; 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 Ã&nbsp; 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Ã©)} Ã&nbsp; l'avance, c'est-Ã&nbsp;-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 Ã&nbsp; l'itÃ©rateur. On teste souvent si la variable est
  infÃ©rieure ou supÃ©rieure Ã&nbsp; 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 Ã&nbsp; 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} Ã&nbsp; \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} Ã&nbsp; \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{&lt;=}\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{&lt;=}\DecValTok{10}\NormalTok{ : }\CommentTok{#Pour chaque nombre j variant de 1 Ã&nbsp; 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 Ã&nbsp; 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 Ã&nbsp; 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 Ã&nbsp; 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 Ã&nbsp;
ce jeu. Ainsi, aprÃ¨s chaque partie, l'ordinateur demande Ã&nbsp; 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 Ã&nbsp; l'utilisateur de saisir un
nombre puis indiquant si celui-ci est plus petit ou plus grand que le
nombre magique, et ce jusqu'Ã&nbsp; 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 Ã&nbsp; 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 Ã&nbsp; 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 Ã&nbsp; l'initialisation de
la boucle Ã&nbsp; l'intÃ©rieur. Pour chaque partie, il faut choisir un nombre
alÃ©atoire et mettre le compteur de tentatives Ã&nbsp; 0. Autrement dit, les
instructions correspondantes (lignes 8 Ã&nbsp; 10) sont faites Ã&nbsp; 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}
</pre></body></html>