\documentclass[a4paper,12pt,french]{article}%{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{chemformula,xfp,ifthen,tabularray,listofitems}

\newsavebox{\tableauCouleurs}


\usepackage[francais,bloc,insidebox,correcindiv,chiffres]{automultiplechoice}

\usepackage{babel}
\usepackage[stretch=30, shrink=25, letterspace=150]{microtype}


\newcommand\nbAleainit{\edef\nbAlea{\fpeval{randint(1,9)}}}

%\ExplSyntaxOn
%\NewDocumentCommand{\newwhiledo}{m m}
%{
%	\bool_while_do:nn { \int_compare_p:n {#1} } { #2 }
%}
%
%\NewExpandableDocumentCommand{\xifthenelse}{mmm}
%{
%	\bool_if:nTF { #1 } { #2 } { #3 }
%}
%
%\cs_new_eq:NN \numtest     \int_compare_p:n
%\cs_new_eq:NN \oddtest     \int_if_odd_p:n
%\cs_new_eq:NN \fptest      \fp_compare_p:n
%\cs_new_eq:NN \dimtest     \dim_compare_p:n
%\cs_new_eq:NN \deftest     \cs_if_exist_p:N
%\cs_new_eq:NN \namedeftest \cs_if_exist_p:c
%\cs_new_eq:NN \eqdeftest   \token_if_eq_meaning_p:NN
%\cs_new_eq:NN \streqtest   \str_if_eq_p:ee
%\cs_new_eq:NN \emptytest   \tl_if_blank_p:n
%\prg_new_conditional:Nnn \xxifthen_legacy_conditional:n { p,T,F,TF }
%{
%	\use:c { if#1 } \prg_return_true: \else: \prg_return_false: \fi:
%}
%%\cs_new_eq:NN \boolean \xxifthen_legacy_conditional_p:n
%\ExplSyntaxOff



%%initialement, remplacé par gdef pour globl
%\newcommand\nbAleainit{\edef\nbAlea{\fpeval{randint(1,9)}}}
\begin{document}

\savebox{\tableauCouleurs}{%
	\noindent
	\begin{tblr}{width=\linewidth, colspec={|l |  * {5}{X[c]|} } , rowsep=2.5pt, cells={valign=m}}
		\hline
		Couleur du papier pH& Rose vif & Rouge & Rouge orangé & Orangé & Jaune ocre \\
		\hline
		Valeur du pH mesuré & 1&2&3&4&5\\
		\hline
		Couleur du papier pH&  Jaune kaki & Vert & Vert foncé & Bleu & Bleu foncé \\
		\hline
		Valeur du pH mesuré & 6&7&8&9&10\\
		\hline
	\end{tblr}
}


\ExplSyntaxOn
\sys_gset_rand_seed:n{4586}
\ExplSyntaxOff

\readlist{\pHcouleurs}{rose vif,rouge,rouge orangé,orangée,jaune ocre,jaune kaki,vert,vert foncé,bleue}



\onecopy{15}{%

\vspace*{-2em}
\noindent%
\begin{minipage}[t]{0.97\linewidth}%
\champnom{\fbox{\begin{minipage}{\linewidth}

Notez votre nom et prénom et classe

               \vspace*{.2cm}\dotfill\vspace*{1mm}\end{minipage} }}
\end{minipage}


\begin{center}
\textbf{La notion de pH}
\end{center}

Au laboratoire, on cherche à déterminer le pH d'une solution aqueuse à l'aide de papier pH. On dépose une goutte de cette solution sur un petit bout de papier pH. On donne :


\begin{center}
\usebox{\tableauCouleurs}


\end{center}

%génération de la valeur du pH
\nbAleainit

\whiledo{\nbAlea=7}{\nbAleainit} 

\begin{questionmultx}{pH-a}
Le papier pH mis en contact avec la solution prend une teinte \pHcouleurs[\nbAlea]. Cocher la valeur du pH de cette solution. %pH=\nbAlea


\AMCboxStyle{size=2ex}
\AMCnumericChoices{\nbAlea}{digits=1, sign=false, nozero=true, keepas=pHvaleur}
\end{questionmultx}


\begin{question}{pH-b}
	\ifthenelse{\nbAlea < 7}%	
	{%VRAI
	\bareme{formula={nature==14 && pHvaleur>7 || nature==7 && pHvaleur==7 ? 1 :%
		nature==1 && pHvaleur>1 ? 2 : 0}		
			}%%barème
	}%%fin du vrai
	{%FAUX
	\bareme{formula={nature==1 && pHvaleur<7 || nature==7 && pHvaleur==7 ? 1 :%
		nature==14 && pHvaleur>7 ? 2 : 0}
			}%%barème
		}%%barème
%
Indiquer la nature de cette solution.


\begin{reponseshoriz}
	\ifthenelse{\nbAlea < 7}%
	{%VRAI
	\bonne{acide}\bareme{set.nature=1,setglobal.natureReponse=1,setglobal.naturebooleen=1}
	\mauvaise{basique}\bareme{set.nature=14,setglobal.natureReponse=14,setglobal.naturebooleen=0}		
	}
	{%FAUX
	\mauvaise{acide}\bareme{set.nature=1,setglobal.natureReponse=1,setglobal.naturebooleen=0}
	\bonne{basique}\bareme{set.nature=14,setglobal.natureReponse=14,setglobal.naturebooleen=1}
	} 
\mauvaise{neutre}\bareme{set.nature=7,setglobal.natureReponse=7,setglobal.naturebooleen=0}
\end{reponseshoriz}
\end{question}

\begin{question}{pH-c}%
	\ifthenelse{\nbAlea < 7}%	
{%VRAI
	\bareme{setglobal.nature=0,%	
		formula={nature==14 && pHvaleur>7 || nature==7 && pHvaleur==7 ? 1 :%
			nature==1 && pHvaleur>1 ? 2 : 0}		
	}%%barème
}%%fin du vrai
{%FAUX
	\bareme{setglobal.nature=0,%	
		formula={nature==1 && pHvaleur<7 || nature==7 && pHvaleur==7 ? 1 :%
			nature==14 && pHvaleur>7 ? 2 : 0}
	}%%barème
}%%barème
%	
\bareme{default.ion=0,%intX==intV
%% 1er cas : pH < 7 et l'élève a coché la valeur exacte ou cohérente <7
%%%%%%%%%%%% il a sélectionné acide et H+ ==> 2 pts
%% 1er cas bis : même chose mais en basique > 7 et nature basique et HO- == > 2 pts
%%
%% 2e cas : la valeur cochée du pH est fausse mais l'ion et la nature sont corrects
formula={%
%\nbAlea < 7 && pHvaleur < 7 && natureReponse==ion || \nbAlea > 7 && pHvaleur > 7 && natureReponse==ion ? 2 : pHvaleur != \nbAlea && natureReponse==ion ? 1 : 0}%
naturebooleen == 1 && natureReponse==ion ? 2 : naturebooleen==0  && natureReponse==ion ? 1 : 0}
}
%
Indiquer, parmi les ions suivants, celui dont la présence est responsable de la nature de la solution : 
 
\begin{reponseshoriz}
\mauvaise{\ch{C$\ell$-}}
\mauvaise{\ch{Na+}}
\mauvaise{\ch{Ca^2+}}
\ifthenelse{\nbAlea < 7}%
{%VRAI
\bonne{\ch{H+}}\bareme{set.ion=1}
\mauvaise{\ch{HO-}}\bareme{set.ion=14}		
}
{%FAUX
\mauvaise{\ch{H+}}\bareme{set.ion=1}
\bonne{\ch{HO-}}\bareme{set.ion=14}
} 

\end{reponseshoriz}
\end{question}


%\begin{question}{quarter}
%pH=8
%		\begin{choices}[o]
%			\def\AMCIntervalFormat##1##2{##1}
%			\AMCIntervals{8}{1}{15}{1}
%		\end{choices}
%\end{question}
}

\end{document}
