Amelioration et problèmes


#1

Bonjour,

 films = {
      Memento: 3,
      Primer: 4,
      Ishtar: 1
    }

puts "Que voulez-vous faire ?"
puts "-- Entrez 'ajout' pour ajouter un film."
puts "-- Entrez 'maj' pour mettre à jour un film."
puts "-- Entrez 'affiche' pour afficher tous les films."
puts "-- Entrez 'suppr' pour supprimer un film."

choix = gets.chomp.downcase
case choix
when 'ajout'
  puts "Quel film voulez-vous ajouter ?"
  titre = gets.chomp
  if films[titre.to_sym].nil?
    puts "Quelle note voulez-vous lui attribuer ? (entrer un chiffre entre 0 et 4.)"
    note = gets.chomp
    while 1
        if note.is_a? Integer
            break
        elsif note.is_a? Float
            break
        else 
            puts "Veuillez entrer une note"
            note = gets.chomp
        end
    end
    films[titre.to_sym] = note.to_i
    puts "Vous avez donné une note de #{note} au film #{titre}."
  else
    puts "Ce film existe déjà ! Sa note est #{films[titre.to_sym]}."
  end
when 'maj'
  puts "Quel film voulez-vous mettre à jour ?"
  titre = gets.chomp
  if films[titre.to_sym].nil?
    puts "Film introuvable !"
  else
    puts "Quelle nouvelle note voulez-vous lui attribuer ? (entrer un chiffre entre 0 et 4.)"
    note = gets.chomp
    films[titre.to_sym] = note.to_i
    puts "#{titre} a bien été mis à jour, sa note est désormais #{note}."
  end
when 'affiche'
  films.each do |film, note|
    puts "#{film}: #{note}"
  end
when 'suppr'
  puts "Quel film voulez-vous supprimer ?"
  titre = gets.chomp
  if films[titre.to_sym].nil?
    puts "Film introuvable !"
  else
    films.delete(titre.to_sym)
    puts "Le film #{titre} a été supprimé."
  end
else
  puts "Désolé, je ne vous ai pas compris."
end

J'ai réédité le code qui à était fait pour vérifier si la note n'est pas du texte

while 1
        if note.is_a? Integer
            break
        elsif note.is_a? Float
            break
        else 
            puts "Veuillez entrer une note"
            note = gets.chomp
        end
    end

Le problème c'est qu'il ne sort jamais de la boucle, portant je fait un break des que c'est bon ???

quelqu’un pourrait m'aider s'il vous plait

Merci


#2

J'ai trouvé comment faire en debeuggant

films = {
  Memento: 3,
  Primer: 4,
  Ishtar: 1
}

puts "Voici la liste des films"
puts ""
films.each do |film, note|
    puts "#{film}: #{note}"
end
puts ""

puts "Que voulez-vous faire ?"
puts "-- Entrez '1' pour ajouter un film."
puts "-- Entrez '2' pour mettre à jour un film."
puts "-- Entrez '3' pour supprimer un film."

choix = gets.chomp.downcase
case choix
when '1'
  puts "Quel film voulez-vous ajouter ?"
  titre = gets.chomp
  if films[titre.to_sym].nil?
    puts "Quelle note voulez-vous lui attribuer ? (entrer un chiffre entre 1 et 5.)"
    note = gets.chomp
    note = note.to_i
    if note == 0 
        while 1
            if note == 0
                puts "Veuillez entrer une note"
                note = gets.chomp
                note = note.to_i
            else
                break
            end
        end
    end
    films[titre.to_sym] = note
    puts "Vous avez donné une note de #{note} au film #{titre}."
  else
    puts "Ce film existe déjà ! Sa note est #{films[titre.to_sym]}."
  end
when '2'
  puts "Quel film voulez-vous mettre à jour ?"
  titre = gets.chomp
  if films[titre.to_sym].nil?
    puts "Film introuvable !"
  else
    puts "Quelle nouvelle note voulez-vous lui attribuer ? (entrer un chiffre entre 1 et 5.)"
    note = gets.chomp
    note = note.to_i
    if note == 0 
        while 1
            if note == 0
                puts "Veuillez entrer une note"
                note = gets.chomp
                note = note.to_i
            else
                break
            end
        end
    end
    films[titre.to_sym] = note.to_i
    puts "#{titre} a bien été mis à jour, sa note est désormais #{note}."
  end
when '3'
  puts "Quel film voulez-vous supprimer ?"
  titre = gets.chomp
  if films[titre.to_sym].nil?
    puts "Film introuvable !"
  else
    films.delete(titre.to_sym)
    puts "Le film #{titre} a été supprimé."
  end
else
  puts "Désolé, je ne vous ai pas compris."
end

Voici le code qui nous interesse

note = note.to_i
        if note == 0 
            while 1
                if note == 0
                    puts "Veuillez entrer une note"
                    note = gets.chomp
                    note = note.to_i
                else
                    break
                end
            end
        end

Je m'explique, en faite quand vous mettez du texte a la place d'une note et que vous convertissez ce texte en integer

Le programme ne pouvant pas convertir du texte(string) en integer va appliquer 0 à la variable

De là on vérifié si la note est de 0 si oui on redemande une note, c'est pour cela que j'ai changé de 0 à 4 en 1 à 5

J'ai test avec une méthode mais il ne me retourné jamais la valeur voici le code si quelqu'un à une explication

def integer(note)
    while 1
        if note == 0
            puts "Veuillez entrer une note"
            note = gets.chomp
            note = note.to_i
        elsif note.is_a Integer
            break
        end
    end
    return(note)
end