% !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{4.00b}
\usepackage[margin=1.5cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python,ignoreerrors]{pyluatex}
\usepackage{scontents}
\usepackage{babel}
\sisetup{locale=FR,output-decimal-marker={,},group-minimum-digits=4}
\usepackage{codehigh}

\begin{scontents}[overwrite,write-out=testscript.py]
def calcul(n) :
	u = 0
	for i in range(n) :
		u = 3*u + 1
	return u
\end{scontents}

\begin{scontents}[overwrite,write-out=testpcode.txt]
Algorithme : calcul mental
Variables  : nb1, nb2, resultat_saisi

Début
	nb1 ← randint (1, 10)
	nb2 ← randint (1, 10)
	Afficher(nb1 , " * ", nb2 , " = ? ")
	...
Fin
\end{scontents}

\begin{document}

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

\textbf{NB} : il est possible, suivant la version de \textsf{piton} installée, que le rendu ne soit pas \textit{strictement identique} (au niveau des marges par exemple).

Ce très léger dysfonctionnement n'affecte pas le \textit{bon fonctionnement} des différents codes.

\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,CouleurNombres=olive]{}
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,CouleurNombres=olive]{}
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=Carbon,Largeur=10cm, centré
\begin{CodePiton}[Style=Carbon,Largeur=10cm,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=Carbon,Largeur=10cm,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 Onglet, Couleur rouge, Largeur=11cm, avec Filigrane, aligné à gauche, sans ligne
\begin{CodePiton}[Style=Onglet,Couleur=red,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=Onglet,Couleur=red,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$AltStyle$\rangle$}} (booléen) pour modifier le style de la console
	\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}<AltStyle,Largeur=10cm,Alignement=center>{}
[i**2 for i in range(50)]
\end{ConsolePiton}
\end{codehigh}}

\begin{ConsolePiton}<AltStyle,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és>{options tcbox}<options linue numebrs piton>
...
\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}<options piton>
...
\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,Largeur=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,Largeur=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},Largeur=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},Largeur=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}[Largeur=8cm]{}
[i**2 for i in range(50)]
\end{PitonThonnyConsole}
\end{codehigh}}

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

\pagebreak

\section{Via lecture de fichiers}

\subsection{Création des fichiers, directement dans le document}

{\small\begin{codehigh}
\begin{scontents}[overwrite,write-out=testscript.py]
def calcul(n) :
    u = 0
    for i in range(n) :
        u = 3*u + 1
    return u
\end{scontents}

\begin{scontents}[overwrite,write-out=testpcode.txt]
Algorithme : calcul mental
Variables  : nb1, nb2, resultat_saisi

Début
    nb1 ← randint (1, 10)
    nb2 ← randint (1, 10)
    Afficher(nb1 , " * ", nb2 , " = ? ")
...
Fin
\end{scontents}
\end{codehigh}}

\subsection{Code python}

{\small\begin{codehigh}
\CodePitonFichier[Largeur=9cm,Filigrane,Lignes=false]{testscript.py}

\CodePitonFichier[Largeur=9cm,Filigrane]{testscript.py}
\end{codehigh}}

\CodePitonFichier[Largeur=9cm,Filigrane,Lignes=false]{testscript.py}

\CodePitonFichier[Largeur=9cm,Filigrane]{testscript.py}

\subsection{Pseudo-code}

{\small\begin{codehigh}
\PseudoCodePitonFichier[Largeur=\linewidth,Filigrane]{testpcode.txt}

\PseudoCodePitonFichier[Largeur=\linewidth,Filigrane,Lignes=false]{testpcode.txt}
\end{codehigh}}

\PseudoCodePitonFichier[Largeur=\linewidth,Filigrane]{testpcode.txt}

\PseudoCodePitonFichier[Largeur=\linewidth,Filigrane,Lignes=false]{testpcode.txt}

\subsection{Version Thonny}

{\small\begin{codehigh}
\PitonThonnyEditorFichier[Largeur=9cm]{testscript.py}
\end{codehigh}}

\PitonThonnyEditorFichier[Largeur=9cm]{testscript.py}

\end{document}