1

case我正在使用语句将罗马数字转换为数字,反之亦然。我的案例通过检查我输入的是字符串还是整数来判断是真还是假。如果我输入 5,我应该得到 V,如果我输入 MI,应该得到 1000。我能够让我的“假”案例正常工作。但我无法让我的“真实”案例发挥作用。

我将 my 反转Roman_Numerals为一个名为Arabic_Numerals. 我不明白为什么我的true案子没有像相反的那样奏效。

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

请就我的false案子为什么不起作用提出建议。我不确定为什么arabic == input不起作用。

4

2 回答 2

2

有2个错误,第一个:

Arabic_Numberals = Hash[Roman_Numerals.to_a.reverse.reverse]

这段代码实际上什么也没做。您在这里要做的是交换键/值,因此您可以使用Hash#invert

Arabic_Numberals = Roman_Numerals.invert

另一种是比较输入时:

if input == arabic

它将比较'5' == 5,这是错误的。您需要在比较之前将输入转换为整数:

if input.to_i == arabic

我希望它有帮助!

于 2017-04-06T05:02:09.373 回答
1

我已经从你的代码中删除了很多注释和额外的条件。请查看以下版本的代码是否是您要查找的代码:

ROMAN_NUMBER_MAP = {
  "M" => 1000,
  "D" => 500,
  "C" => 100,
  "L" => 50,
  "X" => 10,
  "V" => 5,
  "I" => 1,
}

input = gets.chomp.upcase

def numeric?
  !!Float(self) rescue false
end

if input.numeric?
  puts "Answer: The Number '#{input}' => #{ROMAN_NUMBER_MAP.key(input.to_i)}"
else
  puts "Answer: The Roman Numeral '#{input}' => #{ROMAN_NUMBER_MAP[input]}."
end
于 2017-04-06T11:21:26.417 回答