Partage
  • Partager sur Facebook
  • Partager sur Twitter

[RUBY] Vérifier un tableau

Vérifier un tableau grâce à une partie de la saisie utilisateur.

Sujet résolu
    19 juillet 2021 à 15:09:12

    Bonjour à toutes et à tous,

    Je cherche à vérifier un tableau grâce à une partie de la saisie utilisateur.
    Je m'explique.

    Actuellement je procède ainsi:

    # on demande la saisie à l'utilisateur
    puts "Que voulez vous faire?"
    $commande = gets.chomp
    
    # on vérifie que la commande existe
    if !$tab_commandes.include?($commande) 
    	# Message d'erreur si la commande n'existe pas
    	puts "ERREUR COMMANDE"  		
    end

    Le tableau $tab_commandes est construit à partir d'un fichier .txt qui regroupe toutes les commandes et leur description comme ceci:

    déplacer
    : Permet de déplacer
    quitter
    : Permet de quitter

    Or, je souhaite créer une commande de suppression d'un objet contenue dans un tableau via son index à partir d'une saisie utilisateur.

    Quand je fais ça moi même (dans le code du programme) je procède ainsi:

    def supp(index)
    	$tab_inventaire.delete_at(index)
    end
    

    Et afin que j'ai pour que cela fonctionne via la saisie utilisateur, j'ai pour idée de faire:

    if $commande.include? "jeter"
    	tab_obj_supp = $commande.split
    	supp(obj_supp[1])
    end


    Cela crée plusieurs problèmes:

    1) Ça ne fonctionne pas et me renvoi:

    29:in `delete_at': no implicit conversion of String into Integer (TypeError)

    Qui est lié à la fonction citée au dessus à savoir:

    def supp(index)
    	$tab_inventaire.delete_at(index)
    end

    Cela signifie bien que je dois convertir obj_supp[1] en nombre entier?

    Si je réussi cela, la méthode vous semble cohérente? Perfectible (sûrement)?

    2) Comment passer la validation de la commande? J'imagine un truc qui pourrait exclure de la vérification tout ce qui se trouve après l'espace.
    Est-ce possible?
    Est-ce qu'une autre manière de faire serait plus appropriée?

    Merci de votre attention.
    Edit:

    Premier problème résolu en rajoutant cette ligne:

    tab_obj_supp[1] = tab_obj_supp [1].to_i

     Ce qui donne:

    if $commande.include? "jeter"
    		tab_obj_supp = $commande.split
    		tab_obj_supp[1] = tab_obj_supp[1].to_i
    		puts "Vous avez jeté l'objet \"#{$tab_inventaire[tab_obj_supp[1]]}\" de votre inventaire."
    		supp(tab_obj_supp[1])	
    end

     
    Cependant, ça me semble vraiment brouillon, avez-vous une idée pour faire plus simple?
    Peut-être sans passer par la création d'un tableau?

    -
    Edité par Getrox 19 juillet 2021 à 18:03:43

    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2021 à 14:50:07

      1) c'est bien ça, le message le dit, il a besoin de convertir explicitement la chaine en entier (puisque une conversion implicite n'est pas possible) (je viens de voir ton edit)

      2) séparer ta chaine $commmande avant de faire tes tests, ainsi tu compares toujours l'élément 0 à ton tableau des commandes

      • Partager sur Facebook
      • Partager sur Twitter
        21 juillet 2021 à 11:06:25

        Ha oui c’est tout con (surtout que je l'ai fais pour ma commande juste après), mais bon quand on a la tête dans son code des fois le recul nous manque... .
        Je vais faire ça @umfred, juste je vais restreindre la séparation de la commande aux commande de ce type (jeter/utiliser  + index). 

        MErci ;)
        • Partager sur Facebook
        • Partager sur Twitter

        [RUBY] Vérifier un tableau

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown