Je convertis des nombres romains en nombres et vice versa en utilisant une instruction case
. Mon cas prend un vrai ou faux en vérifiant si je saisis une chaîne ou un entier. Si je saisis 5 je devrais sortir V et si je sais M je devrais sortir 1000. Je suis capable d'obtenir mon "Faux" cas pour fonctionner correctement. Mais je ne peux pas faire fonctionner mon cas "vrai".Conversion de chiffres romains dans une approche différente
J'ai inversé mon Roman_Numerals
pour être un hachage inverse appelé Arabic_Numerals
. Je ne vois pas pourquoi mon cas true
ne fonctionne pas comme il l'a fait le contraire.
Roman_Numerals = {
"M" => 1000,
"D" => 500,
"C" => 100,
"L" => 50,
"X" => 10,
"V" => 5,
"I" => 1,
}
#Reverses the Roman Numerals and Arabic Numbers around in the Hash
#to look like 1000 => "M".
Arabic_Numberals = Hash[Roman_Numerals.to_a.reverse.reverse]
input = gets.chomp.upcase
def numeric?
Float(self) != nil rescue false
end
true_false = input.numeric?
#Looks for true or false from true_false variable. Then goes through
#the case to convert a roman numeral or a number.
case true_false
when false
#Converts a Roman Numeral to a Number
Roman_Numerals.each do |roman, value|
puts "#{roman}:#{value}"
if roman == input
puts "Answer: The Roman Numeral '#{input}' => #{value}."
break
else
next
end
end
#Converts a Number to a Roman Numeral
when true
Arabic_Numberals.each do |arabic, letter|
puts "#{letter}:#{arabic}"
puts "#{input}"
if input == arabic
puts "Answer: The Number '#{input}' => #{letter}"
break
else
puts "Why isn't this code working?"
next
end
end
end
conseils sur S'il vous plaît pourquoi mon false
cas ne fonctionne pas. Je ne suis pas sûr pourquoi arabic == input
ne fonctionne pas.
J'ai essayé le input.to_i avant que je crois ... mais peut-être la partie .invert fixerez mon problème. J'ai essayé plusieurs scénarios, mais laissez-moi essayer cela plus tard à la maison ce soir et je vais vous donner mes résultats. – balee1991
C'est parce que le '.to_i' ne fonctionnerait pas sans le hachage corrigé (il comparerait' 5 == 'V'') –
Utilisant .invert et convertissant input.to_i à l'argument travaillé. Je vous remercie. – balee1991