Forums - La Blocothèque - Formulaire de Variables

Ce sujet a 5 réponses, 3 participants et a été mis à jour par   Yannick Audéoud, il y a 1 an et 3 mois. This post has been viewed 379 times

  • Damien Duthoy  | Posté le 7 juillet 2019 à 23 h 41 min

    Bonjour,

    J’aurais bien besoin d’un petit coup de pouce.

    J’aimerais que le bloc formulaire soit capable de détecter seul si le joueur rentre du texte ou des chiffres.

    Autant la vérification de la variable n’est pas un problème, mais pour le formulaire c’est autre chose.

    J’ai tenté d’intégrer deux champs dans le formulaire, mais la validation est impossible si un champ est vide.

    Existe-t-il une liste de toutes les fonction des variables avec leur utilisation (critères, valeur…)

    Merci d’avance, pour votre aide.

    Damien

    Nicolas Klaudel  | Posté le 9 juillet 2019 à 10 h 35 min

    Bonjour Damien,

    A ma connaissance, la seule façon d’avoir la liste exhaustive des fonctionnalités est aujourd’hui de parcourir les fonctions en mode expert.
    Ta demande est cependant plutôt compliquée à réaliser, car le bloc formulaire assigne directement un type à la variable remplie (les fonction isText ou équivalentes considéreront toujours le type utilisé dans le formulaire).
    La seule façon de procéder est donc de tester le contenu directement – je vais réfléchir à une solution.

    Dans un premier temps, poser la question à l’apprenant pourrait-il fonctionner dans ton cas ?

    Nicolas

    Yannick Audéoud  | Posté le 11 juillet 2019 à 11 h 02 min

    Bonjour,

    La version à 2 paramètres des fonctions toInteger et toDecimal devraient vous permettre de faire ce que vous souhaitez.

    Si vous souhaitez simplement forcer l’utilisateur à entrer un nombre directement depuis le bloc Formulaire, la seule possibilité est de sélectionner le type Nombre entier ou Nombre décimal dans les options du bloc Formulaire.

    Si vous souhaitez pouvoir laisser le champ libre à l’utilisateur et tester la réponse une fois le bloc Formulaire validé et fermé, alors vous pouvez utiliser la méthode suivante :

    Créer tout d’abord un bloc Formulaire avec un seul champ en mode Texte dans lequel l’utilisateur pourra entrer sa réponse. Cette réponse sera donc une variable de type texte, qui pourrait très bien ne contenir que des chiffres et éventuellement un signe négatif. Stocker la réponse dans la variable réponse.

    Placer ensuite un bloc Condition à la suite de ce bloc Formulaire pour vérifier la variable rentrée par l’utilisateur. Utiliser la condition suivante :
    condition

    – Si vrai (première sortie) : la réponse est un nombre entier
    – Si faux (deuxième sortie) : la réponse est un texte

    Explications : la fonction toInteger tente de convertir la réponse en nombre entier. Si ce n’est pas possible, elle retourne le nombre en 2e paramètre. Donc on vérifie d’abord si la réponse vaut -1, et si ce n’est pas le cas, on vérifie si on arrive à convertir la réponse en nombre.

    Précision : on aurait pu utiliser « 0 » au lieu de « -1 » pour être plus simple dans l’écriture de la condition, mais cela aurait fait une erreur dans le cas où l’utilisateur entre la réponse « -0 » (qui est pourtant bien égale au nombre 0).

    Plus d’informations disponibles sur la fonction toInteger dans la liste des fonctions directement dans l’application. Cette liste est disponible en cliquant sur le bouton avec 3 barres blanches en haut à droite d’un bloc Variables.

    Pour faire la même chose avec des nombres décimaux, utiliser la fonction toDecimal.

    Une fois que l’on sait si la réponse est un nombre ou non, il suffit d’utiliser à nouveau la fonction toInterger (ou toDecimal) pour convertir la réponse est l’utiliser dans la suite du scénario.

    Cordialement,
    Yannick

    Damien Duthoy  | Posté le 12 juillet 2019 à 15 h 07 min

    Bonjour,

    Merci pour vos réponses. Je vais essayer la solution de Yanick ce week-end.
    Pour répondre à la question de Nicolas, je souhaiterais créer une sorte d’intelligence artificielle afin de ne pas orienter la réponse du joueur (escape game). Il est donc nécessaire de savoir si la réponse est un code numérique ou un texte et en fonction des réponses, une action ou un texte sera donné au joueur.

    Je reviens vers vous rapidement.

    Damien

    Damien Duthoy  | Posté le 14 juillet 2019 à 23 h 16 min

    Bonjour,

    Je reviens vers vous pour vous dire que la solution de Yannick Audéoud fonctionne parfaitement.

    Merci beaucoup.

    Yannick Audéoud  | Posté le 15 juillet 2019 à 18 h 47 min

    Bonjour,

    Ravi de lire que cette solution a pu fonctionner pour vous !

    Je me permets de préciser que la réponse que j’ai donnée est très « générique », c’est à dire qu’elle est fonctionnelle pour n’importe quel nombre.

    Il est possible de simplifier l’écriture si vous êtes dans un cas plus spécifique. Par exemple, dans le cas d’un escape game, j’imagine que vous allez plutôt utiliser des nombres entiers positifs en guise de bonne réponse. Auquel cas, la condition devient un peu plus simple à écrire :

    toInteger(réponse, -1) >= 0

    Cette condition équivaut à « Si la réponse est un nombre entier positif ».

    Bien cordialement,
    Yannick