Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Super TP, très instructif et clair ! J'espère qu'il y aura une suite dans la même veine ou sur des sujets proche. Il m'a motivé à faire un projet similaire écrit en Rust qui intègre la création de modules natifs pour Nodejs et Python3.
Je n'ai pas beaucoup d'expérience avec python, les modifications que je peux proposer ne sont donc peut-être pas les plus pythonic.
Les modifications de cette PR portent principalement sur la gestion des erreurs et sur le comportement de la fonction
valider
.Les erreurs
try
except
, comme le fait votre script avec les erreurs fournies par Python :ValueError
main
qui s'occupe de les afficher. En d'autres termes, les erreurs ne sont plus affichées avecprint
au sein même des fonctions. En effet, que se passerait-il si un développeur ou vous-même souhaitiez réutiliser ce script dans un autre projet et qu'au lieu d'afficher les erreurs vous souhaitiez les cacher ?InputLengthTooLongError
etInputLengthTooShortError
. Ils vérifient respectivement que la chaîne de caractères testée n'est ni trop courte ni trop longue. La spécification du NCDA semble indiquer que la chaîne de caractères (sans son caractère de contrôle final) doit avoir une longueur inférieure à la taille de « l'alphabet de contrôle » (R) .Mais peut-être qu'il s'agit d'une erreur d'interprétation de ma part, ou bien même que cette partie de la spécification n'est pas en vigueur dans les ARK BNF.
Les fonctions
valider
de cette PR ne correspond plus du tout à l'implémentation originelle. Dans cette implémentation elle contrôle la validité de l'identifiant.Deux remarques sur la syntaxe :
permet de récupérer le début de la chaîne de caractères sans le dernier caractère. À l'inverse :
permet de récupérer le dernier caractère.
Le contrôle des erreurs est délégué entièrement à la fonction
calculer_controle
La fonction
calculer_controle
pour sa part a été simplifiée, elle ne fait plus appel à l'ancienne fonctionvalider
pour déterminer la validité d'un caractère. Elle s'appuie exclusivement sur le retour d'erreur deALPHABET.index(carac)
pour déterminer que l'identifiant contient un caractère invalide. La contrepartie de cette approche, même si elle est plus rapide, est qu'il n'y a plus de rapport détaillé de l'ensemble des caractères invalides puisque la fonction s'arrête à la première erreur trouvée. Je comprendrais que cela puisse être considéré comme une régression par rapport à l'implémentation originelle.Bien cordialement