% !TeX TXS-program:compile = txs:///arara
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')

\documentclass[french,a4paper,10pt]{article}
\def\PLver{3.02e}
\usepackage[margin=1.5cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python,ignoreerrors]{pyluatex}
\usepackage{babel}
\sisetup{locale=FR,output-decimal-marker={,},group-minimum-digits=4}
\usepackage{codehigh}

\begin{document}

\part*{ProfLycee (\PLver), Piton et Pyluatex}

\section{Code \og Piton \fg{}, indépendant de Pyluatex}

\subsection{Préambule basique}

{\small \begin{codehigh}
\documentclass[french,a4paper,10pt]{article}
\usepackage{ProfLycee}
\useproflyclib{piton}                           % lua
\end{codehigh}}

\subsection{Exemples}

{\small \begin{codehigh}
%Sortie par défaut
\begin{CodePiton}{}
def valeur_absolue(x):
    "Renvoie la valeur absolue de x"
    #le petit test qui va bien
    if x > 0:
        return x
    else:
    return -x
\end{CodePiton}
\end{codehigh}}

\begin{CodePiton}{}
def valeur_absolue(x):
	"Renvoie la valeur absolue de x"
	#le petit test qui va bien
	if x > 0:
		return x
	else:
		return -x
\end{CodePiton}

{\small \begin{codehigh}
%Sortie avec style Classique, Largeur=10cm
\begin{CodePiton}[Largeur=10cm]{}
def valeur_absolue(x):
    "Renvoie la valeur absolue de x"
    #le petit test qui va bien
    if x > 0:
        return x
    else:
    return -x
\end{CodePiton}
\end{codehigh}}

\begin{CodePiton}[Largeur=10cm]{}
def valeur_absolue(x):
	"Renvoie la valeur absolue de x"
	#le petit test qui va bien
	if x > 0:
		return x
	else:
		return -x
\end{CodePiton}

\pagebreak

{\small \begin{codehigh}
%Sortie avec Style=Moderne, Sans Titre, Largeur=10cm, centré
\begin{CodePiton}[Style=Moderne,Largeur=10cm,BarreTitre=false,Alignement=center]{}
def valeur_absolue(x):
    "Renvoie la valeur absolue de x"
    #le petit test qui va bien
    if x > 0:
        return x
    else:
    return -x
\end{CodePiton}
\end{codehigh}}

\begin{CodePiton}[Style=Moderne,Largeur=10cm,BarreTitre=false,Alignement=center]{}
def valeur_absolue(x):
	"Renvoie la valeur absolue de x"
	#le petit test qui va bien
	if x > 0:
		return x
	else:
		return -x
\end{CodePiton}

{\small \begin{codehigh}
%Sortie avec Style=Classique, Largeur=0.5\linewidth, aligné à droite, sans Cadre, avec Filigrane
\begin{CodePiton}%
    [Largeur=0.5\linewidth,Cadre=false,Alignement=flush right,Filigrane,Titre={Script}]{}
#environnement piton avec numéros de ligne, pleine largeur, style moderne
def valeur_absolue(x):
    "Renvoie la valeur absolue de x"
    #le petit test qui va bien
    if x > 0:
        return x
    else:
    return -x
\end{CodePiton}
\end{codehigh}}

\begin{CodePiton}[Largeur=0.5\linewidth,Cadre=false,Alignement=flush right,Filigrane,Titre={Script}]{}
def valeur_absolue(x):
	"Renvoie la valeur absolue de x"
	#le petit test qui va bien
	if x > 0:
		return x
	else:
		return -x
\end{CodePiton}

{\small \begin{codehigh}
%Sortie Moderne, Largeur=11cm, avec Filigrane, aligné à gauche, sans ligne
\begin{CodePiton}[Style=Moderne,Largeur=11cm,Filigrane,Alignement=flush left,Lignes=false]{}
def valeur_absolue(x):
    "Renvoie la valeur absolue de x"
    #le petit test qui va bien
    if x > 0:
        return x
    else:
    return -x
\end{CodePiton}
\end{codehigh}}

\begin{CodePiton}[Style=Moderne,Largeur=11cm,Filigrane,Alignement=flush left,Lignes=false]{}
def valeur_absolue(x):
	"Renvoie la valeur absolue de x"
	#le petit test qui va bien
	if x > 0:
		return x
	else:
		return -x
\end{CodePiton}

\pagebreak

\section{Console \og Piton \fg{}, dépendant de Pyluatex}

\subsection{Préambule, avec le package pyluatex}

{\small \begin{codehigh}
\documentclass[french,a4paper,10pt]{article}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python]{pyluatex}    % lua + shell-escape
\end{codehigh}}

\subsection{Commande}

{\small \begin{codehigh}
\begin{ConsolePiton}[Options piton]<Clés>{Options tcbox}
...
...
\end{ConsolePiton}
\end{codehigh}}

\medskip

Les clés, à placer entre \texttt{<...>}, sont :

\begin{itemize}
	\item \textbf{\textsf{$\langle$Logo$\rangle$}} pour afficher un petit logo dans les \textit{titres} de la console REPL ; \hfill{}défaut : \textbf{\textsf{$\langle$true$\rangle$}}
	\item \textbf{\textsf{$\langle$Largeur$\rangle$}} pour spécifier la largeur de la console REPL ; \hfill{}défaut : \textbf{\textsf{$\langle$\textbackslash{}linewidth$\rangle$}}
	\item \textbf{\textsf{$\langle$Alignement$\rangle$}} pour spécifier l'alignement de la console REPL.\hfill{}défaut : \textbf{\textsf{$\langle$flush left$\rangle$}}
\end{itemize}

\subsection{Exemples}

{\small \begin{codehigh}
%Déclaration d'une fonction python + librairie random pour utilisation ultérieure
\begin{python}
from random import randint

def valeur_absolue(x):
    "Renvoie la valeur absolue de x"
    #le petit test qui va bien
    if x > 0:
        return x
    else:
        return -x
\end{python}
\end{codehigh}}

\begin{python}
from random import randint

def valeur_absolue(x):
	"Renvoie la valeur absolue de x"
	#le petit test qui va bien
	if x > 0:
		return x
	else:
		return -x
\end{python}

{\small \begin{codehigh}
\begin{ConsolePiton}{}
1+1
2**10
valeur_absolue(-3)
valeur_absolue(0)
valeur_absolue(5)
print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
\end{ConsolePiton}
\end{codehigh}}

\begin{ConsolePiton}{}
1+1
2**10
valeur_absolue(-3)
valeur_absolue(0)
valeur_absolue(5)
print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
\end{ConsolePiton}

\pagebreak

{\small \begin{codehigh}
\begin{ConsolePiton}<Largeur=11cm,Alignement=center,Logo=false>{}
1+1
2**10
valeur_absolue(-3)
valeur_absolue(0)
valeur_absolue(5)
print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
liste = [randint(1,20) for i in range(10)]
print(liste)
print(max(liste), min(liste), sum(liste))
\end{ConsolePiton}
\end{codehigh}}

\begin{ConsolePiton}<Largeur=11cm,Alignement=center,Logo=false>{}
1+1
2**10
valeur_absolue(-3)
valeur_absolue(0)
valeur_absolue(5)
print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
liste = [randint(1,20) for i in range(10)]
print(liste)
print(max(liste), min(liste), sum(liste))
\end{ConsolePiton}

{\small \begin{codehigh}
\begin{ConsolePiton}<Largeur=10cm,Alignement=center>{}
[i**2 for i in range(50)]
\end{ConsolePiton}
\end{codehigh}}

\begin{ConsolePiton}<Largeur=10cm,Alignement=center>{}
[i**2 for i in range(50)]
\end{ConsolePiton}

\pagebreak

\section{Présentation, et exécution, comme avec Thonny}

\subsection{Préambule, avec le package pyluatex}

{\small \begin{codehigh}
\documentclass[french,a4paper,10pt]{article}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python]{pyluatex}    % lua + shell-escape
\end{codehigh}}

\subsection{Commandes}

{\small \begin{codehigh}
\begin{PitonThonnyEditor}<clé>[options tcbox]{largeur}
...
\end{PitonThonnyEditor}
\end{codehigh}}

\medskip

La clé, à placer entre \texttt{<...>}, est :

\begin{itemize}
	\item la clé \textbf{\textsf{$\langle$Gobble$\rangle$}} pour spécifier des options liées au \textsf{gobble}, parmi \textbf{\textsf{$\langle$nb/auto$\rangle$}} ;
	
	\hfill{}à adapter en fonction des situations (!)
	\item la clé \textbf{\textsf{$\langle$NomFichier$\rangle$}} pour afficher le nom du fichier dans le cartouche \textit{éditeur}.
	
	\hfill{}défaut : \textbf{\textsf{$\langle$script.py$\rangle$}}
\end{itemize}

{\small \begin{codehigh}
\begin{PitonThonnyConsole}<clés>[options tcbox]{largeur}
...
\end{PitonThonnyConsole}
\end{codehigh}}

\medskip

Les clés, à placer entre \texttt{<...>}, sont :

\begin{itemize}
	\item la clé \textbf{\textsf{$\langle$NomConsole$\rangle$}} pour afficher le nom de la \textit{console} ; \hfill{}défaut \textbf{\textsf{$\langle$console$\rangle$}}
	\item la clé \textbf{\textsf{$\langle$IntroConsole$\rangle$}} pour afficher le message d'accueil de la console.
\end{itemize}

\subsection{Exemples}

{\small\begin{codehigh}
\begin{python}
from math import gcd

def est_duffy(n) :
    nb_div, somme_div = 0, 0
    for i in range(1, n+1) :
        if n % i == 0 :
            nb_div += 1
            somme_div += i
    if gcd(somme_div, n) == 1 :
        return True
    else :
        return False

\end{python}
\end{codehigh}}

{\small\begin{codehigh}
\begin{PitonThonnyEditor}<NomFichier=tpcapytale.py>{12cm}
#PROJET CAPYTALE
from math import gcd

def est_duffy(n) :
    nb_div = 0
    somme_div = 0
    for i in range(1, n+1) :
        if n % i == 0 :
            nb_div += 1
            somme_div += i
    if gcd(somme_div, n) == 1 :
        return True
    else :
        return False
\end{PitonThonnyEditor}
\end{codehigh}}

\begin{PitonThonnyEditor}<NomFichier=tpcapytale.py>{12cm}
#PROJET CAPYTALE
from math import gcd

def est_duffy(n) :
	nb_div = 0
	somme_div = 0
	for i in range(1, n+1) :
		if n % i == 0 :
			nb_div += 1
			somme_div += i
	if gcd(somme_div, n) == 1 :
		return True
	else :
		return False
\end{PitonThonnyEditor}

{\small\begin{codehigh}
\begin{PitonThonnyConsole}<IntroConsole={python 3.8.10}>{12cm}
#Run tpcapytale.py
est_duffy(6)
est_duffy(13)
est_duffy(265)

from random import randint
nb = randint(1,100000)
nb, est_duffy(nb)
\end{PitonThonnyConsole}
\end{codehigh}}

\begin{python}
from math import gcd

def est_duffy(n) :
	nb_div, somme_div = 0, 0
	for i in range(1, n+1) :
		if n % i == 0 :
			nb_div += 1
			somme_div += i
	if gcd(somme_div, n) == 1 :
		return True
	else :
		return False
	
\end{python}
\begin{PitonThonnyConsole}<IntroConsole={python 3.8.10}>{12cm}
#Run tpcapytale.py
est_duffy(6)
est_duffy(13)
est_duffy(265)

from random import randint
nb = randint(1,100000)
nb, est_duffy(nb)
\end{PitonThonnyConsole}

{\small\begin{codehigh}
\begin{PitonThonnyConsole}{8cm}
[i**2 for i in range(50)]
\end{PitonThonnyConsole}
\end{codehigh}}

\begin{PitonThonnyConsole}{8cm}
[i**2 for i in range(50)]
\end{PitonThonnyConsole}

\end{document}