Source: Scratch Wiki en français
En suivant ce tutoriel, vous saurez ce qu'est la casse informatique, comment détecter une majuscule sur Scratch et jouer avec la casse des lettres. Bonne lecture !
Casse informatique, quésaco ?
La casse informatique est une notion qui semble complexe mais toute simple : pour faire court, c'est la différence entre une « MAJUSCULE » et une « minuscule ». Dans certains cas, la présence ou non d'une majuscule change le sens d'un mot (Rennes (ville) - rennes (animaux)).
Et pourquoi en parler ici ? Et bien, sur Scratch, la casse informatique n'existe pas. Alors, comment différencier majuscules et minuscules ? À priori, c'est impossible. Sauf que cette page n’existerait pas s'il n'y avait pas un moyen.
Détecter les majuscules sur Scratch
Il y a bel et bien un moyen de détecter les majuscules sur Scratch. Et ce moyen est lié au fonctionnement des costumes d'un sprite.
En effet, les noms des costumes sur Scratch sont sensibles à la casse (ce qui signifie qu'il y a une différence entre majuscules et minuscules). Il est donc possible de créer un détecteur de majuscules, sur Scratch.
Réalisation
Costumes
Pour commencer, créez deux costumes dans votre sprite.
- le premier, nommez le « null » ;
- le second, placez dans son nom toutes les lettres (toutes en majuscules) dont vous voulez qu'on puisse différencier majuscules et minuscules (voir liste suivante) ;
- "ABCDEFGHIJKLMNOPQRSTUVWXYZÂÄÀÁÅÊËÈÉÎÏÌÍÔÖÒÓÛÜÙÚÑÕßÁÇÆŒØß"
Script
Créez un bloc personnalisé, sans rafraîchissement d'écran, comme le suivant :
définir | Texte | Détecter MAJmin (lettre) si <(longueur de (lettre)) > (1)> alors mettre [| Texte | MAJmin v] à [Erreur : Plusieurs symboles] stop [ce script v] fin mettre [| Texte | MAJmin | Lettres v] à […] // le nom du second costume si <non <(| Texte | MAJmin | Lettres) contient (lettre)> > alors mettre [| Texte | MAJmin v] à [Erreur : Pas une lettre de la feuille] stop [ce script v] fin mettre [| Texte | MAJmin | Idx v] à (1) mettre [| Texte | MAJmin | Vérif v] à [] répéter (longueur de (| Texte | MAJmin | Lettres)) fois si <non <(lettre (| Texte | MAJmin | Idx) de (| Texte | MAJmin | Lettres)) = (lettre)>> alors mettre [| Texte | MAJmin | Vérif v] à (regrouper (| Texte | MAJmin | Vérif) et (lettre (| Texte | MAJmin | Idx) de (| Texte | MAJmin | Lettres))) sinon mettre [| Texte | MAJmin | Vérif v] à (regrouper (| Texte | MAJmin | Vérif) et (lettre)) fin ajouter (1) à [| Texte | MAJmin | Idx v] fin basculer sur le costume (null v) basculer sur le costume (| Texte | MAJmin | Vérif) si <([nom v] du costume) = [null]> alors mettre [| Texte | MAJmin v] à [min] sinon mettre [| Texte | MAJmin v] à [MAJ] fin
(| Texte | MAJmin | Lettres)
à la même valeur que le nom du second costume, sinon votre script ne marchera pas (même à une lettre près).Blocs personnalisés
Décomposer un texte
Réalisation
Matériel nécessaire
- Variables
(| Texte | Compteur)
(| Texte | Résultat)
sortie des fonctions(| Texte | Symboles)
qui permettra de ne pas prendre en compte les symboles(| Texte | Fins de phrase)
qui contient des symboles indiquant une fin de phrase- Définissez-la à la valeur suivante : ".!?…"
- Listes
(| Texte | Mots décomposés::list)
où chaque élément sera un mot
Blocs
- Bloc personnalisé sans rafraîchissement d'écran permettant de décomposer un texte
définir | Texte | Décomposer (texte) mettre [| Texte | Symboles v] à […] // une liste de tous les symboles, en incluant l'espace (voir plus bas) supprimer tous les éléments de la liste [| Texte | Mots décomposés v] // supprime le texte précédent mettre [| Texte | Résultat v] à [] mettre [| Texte | Compteur v] à [1] répéter (longueur de (texte)) fois si <(| Texte | Symboles) contient (lettre (| Texte | Compteur) de (texte))> alors si <(longueur de (| Texte | Résultat)) > (0)> alors ajouter (| Texte | Résultat) à [| Texte | Mots décomposés v]::list // un nouveau mot, espace ou symbole est détecté, on sauvegarde le mot s'il existe fin ajouter (lettre (| Texte | Compteur) de (texte)) à [| Texte | Mots décomposés v]::list // on ajoute le symbole en question mettre [| Texte | Résultat v] à [] // le « mot » actuel est remis à zéro sinon mettre [| Texte | Résultat v] à (regrouper (| Texte | Résultat) et (lettre (| Texte | Compteur) de (texte))) fin ajouter [1] à [| Texte | Compteur v] fin ajouter (| Texte | Résultat) à [| Texte | Mots décomposés v]::list
(| Texte | Symboles)
, sinon le programme de fonctionnera pas. Voici un exemple de liste que vous pouvez insérer dans la variable : @# 0123456789&"'(){}[]'§!?;.,:/\=+≠±<>≤≥*%«»-—–_°¡¿∞…•÷\‹›“”‘’¶„$€¥£‰
- Bloc personnalisé sans rafraîchissement d'écran permettant de recomposer un texte précédemment décomposé (et, qui aura sans doute été traité)
définir | Texte | Recomposer le texte traité mettre [| Texte | Résultat v] à [] mettre [| Texte | Compteur v] à [1] répéter (longueur de [| Texte | Mots décomposés v]) fois mettre [| Texte | Résultat v] à (regrouper (| Texte | Résultat) et (élément (| Texte | Compteur) de [| Texte | Mots décomposés v])) ajouter [1] à [| Texte | Compteur v] fin
Mettre une lettre en Majuscule ou Minuscule
Matériel nécessaire (2)
- Variable
(| Texte | Lettres | Résultat)
- Listes
(| Texte | Lettres | MAJ::list)
où chaque élément sera une majuscule(| Texte | Lettres | min::list)
où chaque élément sera une minuscule
Réalisation
Au lancement du projet
définir | Lancement | Créer une lettre -MAJ, min- (MAJ) (min) si <(MAJ) = (min)> alors ajouter (MAJ) à [| Texte | Lettres | MAJ v]::list ajouter (min) à [| Texte | Lettres | min v]::list fin
définir | Lancement | supprimer tous les éléments de la liste [| Texte | Lettres | MAJ v] supprimer tous les éléments de la liste [| Texte | Lettres | min v] | Lancement | Créer une lettre -MAJ, min- [A] [a]::custom | Lancement | Créer une lettre -MAJ, min- [B] [b]::custom | Lancement | Créer une lettre -MAJ, min- [C] [c]::custom … | Lancement | Créer une lettre -MAJ, min- [É] [é]::custom …
(| Texte | MAJmin | Lettres)
. Si vous ne le faites pas, certaines lettres seront considérées comme des symboles.Bloc
définir | Texte | Mettre (lettre) en (case) si <<non <[| Texte | Lettres | MAJ v] contient (lettre)>> ou <non <[| Texte | Lettres | min v] contient (lettre)>>> alors // vérification de si les lettres correspondantes sont les mêmes mettre [| Texte | Lettres | Résultat v] à (lettre) stop [ce script v] fin si <(case) = [min]> alors mettre [| Texte | Lettres | Résultat v] à (élément (position de (lettre) dans [| Texte | Lettres | MAJ v]) de [| Texte | Lettres | min v]) sinon mettre [| Texte | Lettres | Résultat v] à (élément (position de (lettre) dans [| Texte | Lettres | min v]) de [| Texte | Lettres | MAJ v]) fin
Interagir avec un mot
Matériel nécessaire (3)
- Variables
(| Texte | Lettre | Compteur)
(| Texte | Lettre | Résultat)
(NE PAS CONFONDRE AVEC(| Texte | Lettres | Résultat)
, QUI A UN « S » DE PLUS)
- Liste
(| Texte | Lettres actionnables::list)
Bloc
Créez le bloc personnalisé suivant, sans rafraîchissement d'écran :
définir | Texte | Modifier le mot (mot) (lettres) (case voulue) <entier> supprimer tous les éléments de la liste [| Texte | Lettres actionnables v] si <non <entier>> alors mettre [| Texte | Lettre | Résultat v] à [] mettre [| Texte | Lettre | Compteur v] à [1] répéter jusqu'à ce que <(| Texte | Lettre | Compteur) > (longueur de (lettres))> si <(lettre (| Texte | Lettre | Compteur) de (lettres)) = [;]> alors ajouter (| Texte | Lettre | Résultat) à [| Texte | Lettres actionnables v]::list mettre [| Texte | Lettre | Résultat v] à [] sinon mettre [| Texte | Lettre | Résultat v] à (regrouper (| Texte | Lettre | Résultat) et (lettre (| Texte | Lettre | Compteur) de (lettres))) fin ajouter (1) à [| Texte | Lettre | Compteur v] fin si <(longueur de (| Texte | Lettre | Résultat)) > (0)> alors ajouter (| Texte | Lettre | Résultat) à [| Texte | Lettres actionnables v]::list fin fin mettre [| Texte | Lettre | Résultat v] à [] mettre [| Texte | Lettre | Compteur v] à [1] répéter (longueur de (mot)) fois si <<[| Texte | Lettres actionnables v] contient (| Texte | Lettre | Compteur)> ou <entier>> alors | Texte | Mettre (lettre (| Texte | Lettre | Compteur) de (mot)) en (case voulue)::custom mettre [| Texte | Lettre | Résultat v] à (regrouper (| Texte | Lettre | Résultat) et (| Texte | Lettres | Résultat)) // attentions aux « S » dans les noms de variable ! sinon mettre [| Texte | Lettre | Résultat v] à (regrouper (| Texte | Lettre | Résultat) et (lettre (| Texte | Lettre | Compteur) de (mot))) fin ajouter (1) à [| Texte | Lettre | Compteur v] fin
Formatage de texte
Général
Avant de formater un texte, créons ce bloc personnalisé sans rafraîchissement d'écran, permettant d’interagir avec un texte.
définir | Texte | Formater (texte) (méthode) (fonction) | Texte | Décomposer (texte)::custom mettre [| Texte | Compteur v] à [1] mettre [| Texte | Résultat v] à [] répéter (longueur de [| Texte | Mots décomposés v]) fois … // les « méthodes » seront insérées ici mettre [| Texte | Résultat v] à (regrouper (| Texte | Résultat) et (| Texte | Lettre | Résultat)) ajouter [1] à [| Texte | Compteur v] fin | Texte | Recomposer le texte traité::custom
Maintenant, créez la variable (| Texte | Aléatoire | Compteur)
.
Divers formatages
…
dans le bloc définir | Texte | Formater (texte) (méthode)
.Titrer un texte
si <<<(méthode::custom) = [titrer]> ou <(méthode::custom) = [0]>> ou <(longueur de (méthode::custom)) = [0]>> alors // méthode par défaut si méthode est vide si <<(fonction::custom) = [titre]> ou <(longueur de (fonction::custom)) = [0]>> alors // la première fonction est celle utilisée si la valeur « fonction » est vide | Texte | Modifier le mot (élément (| Texte | Compteur) de [| Texte | Mots décomposés v]) [1;] [MAJ] <(1) = (2)> ::custom fin si <(fonction::custom) = [phrase]> alors mettre [| Texte | Aléatoire | Compteur v] à ((| Texte | Compteur) - (1)) répéter jusqu'à ce que <non <(élément (| Texte | Aléatoire | Compteur) de [| Texte | Mots décomposés v]) = [ ]>> // un espace dans la zone de texte ajouter (-1) à [| Texte | Aléatoire | Compteur v] fin si <<(| Texte | Compteur) = (1)> ou <(| Texte | Fins de phrase) contient (élément (| Texte | Aléatoire | Compteur) de [| Texte | Mots décomposés v])>> alors | Texte | Modifier le mot (élément (| Texte | Compteur) de [| Texte | Mots décomposés v]) [1;] [MAJ] <(1) = (2)> ::custom sinon | Texte | Modifier le mot (élément (| Texte | Compteur) de [| Texte | Mots décomposés v]) [0;] [MAJ] <(1) = (2)> ::custom fin fin fin
Mettre en majuscule un mot (entier ou pas)
si <<(méthode::custom) contient [maj]> ou <(méthode::custom) = [1]>> alors | Texte | Modifier le mot (élément (| Texte | Compteur) de [| Texte | Mots décomposés v]) (regrouper (fonction::custom) et [;]) [MAJ] <[entier] = (fonction::custom)> ::custom fin
Mettre en minuscule un mot (entier ou pas)
si <<(méthode::custom) contient [min]> ou <(méthode::custom) = [2]>> alors | Texte | Modifier le mot (élément (| Texte | Compteur) de [| Texte | Mots décomposés v]) (regrouper (fonction::custom) et [;]) [min] <[entier] = (fonction::custom)> ::custom fin
Aléatoire
si <<(méthode::custom) = [aléatoire]> ou <(méthode::custom) = [3]>> alors mettre [| Texte | Aléatoire | Compteur v] à (1) mettre [| Texte | Lettre | Compteur v] à [] répéter (longueur de (élément (| Texte | Compteur) de [| Texte | Mots décomposés v])) fois si <(nombre aléatoire entre (1) et (2)) = (2)> alors mettre [| Texte | Lettre | Compteur v] à (regrouper (| Texte | Lettre | Compteur) et (regrouper (| Texte | Aléatoire | Compteur) et [;])) fin ajouter (1) à [| Texte | Aléatoire | Compteur v] fin | Texte | Modifier le mot (élément (| Texte | Compteur) de [| Texte | Mots décomposés v]) (| Texte | Lettre | Compteur) [MAJ] <(1) = (2)> ::custom fin
Voir aussi
- Créer des traductions sans utiliser l'extension Traduire (tutoriel)
- Sensibilité à la casse (Wikipédia)