La solution la plus simple pour filtrer l’entrée utilisateur, dans notre cas, serait de tout simplement ignorer toutes les instructions situées après le premier retour à la ligne. Ainsi, seul le calcul est exécuté, et toutes les autres instructions sont ignorées.
L’inconvénient de cette méthode est qu’il est tout de même possible d’exécuter une instruction en remplaçant le calcul par une instruction, comme par exemple :

Il va donc falloir écrire une fonction qui analyse tous les caractères de la chaîne en entrée, et vérifier que ces derniers correspondent bien à ce qu’un calcul est censé contenir (chiffres, opérateurs, parenthèses).
On va tout d’abord définir une fonction nommée
est_valide, qui prend en paramètre chaîne, c’est-à-dire la chaîne de caractères que l’on veut vérifier.

Dans cette fonction, on va tout d’abord définir une liste de caractères autorisés, qu’on va stocker dans une variable :

Ensuite, on va boucler sur tous les caractères de la chaîne, et, si l’un d’eux ne correspond pas à la liste, la fonction renvoie faux. Si, une fois que tous les caractères sont analysés, aucun n’est invalide, alors la fonction renvoie vrai. Pour boucler sur les caractères d’une chaîne, on peut utiliser le bloc suivant :

La variable i va successivement prendre la valeur de chaque caractère de la chaîne chaine. Pour vérifier si un caractère est valide, on peut utiliser la méthode suivante :

Ce bloc permet de trouver la position de i dans caracteres_autorises. Par exemple, si i vaut 4, alors ce bloc renverra sa position, c'est-à-dire 4. En revanche, si i ne se trouve pas dans caracteres_autorises, alors ce bloc renvoie -1. On peut donc déterminer si i est un caractère valide. Si ce n’est pas le cas, on quitte la boucle et on renvoie faux, et sinon on continue. Une fois la boucle terminée, on renvoie vrai.
Enfin, il faut utiliser la fonction nouvellement créée dans le programme de la carte serveur pour vérifier si le calcul est valide avant de l’exécuter.
Si tu es bloqué :
- Vérifie que la fonction est_valide ne laisse passer que les caractères autorisés (par exemple 0123456789+-/*()), et qu’elle retourne bien False dès qu’un caractère n’est pas dans cette liste.
- Assure-toi que, dans la boucle principale, tu n’exécutes le calcul que si name == "CALCUL" et est_valide(value) est vrai ; sinon, le message doit être ignoré.
- Si tous tes calculs sont rejetés, regarde si tu n’as pas mis d’espaces ou d’autres caractères dans le message envoyé par le client : ils ne font pas partie de la liste autorisée et feront échouer la validation. Tu peux aussi afficher dans la console la valeur de value et le résultat de est_valide(value) pour comprendre ce qui se passe.