2016-09-01 9 views
2

私は電卓プログラムを実行しようとしていますが、何らかの理由でコードの一部をスキップしています。ここに私の全体のルビーコードです:ルビーコードプログラムの一部をスキップする

# require yaml file 

require 'yaml' 
MESSAGES = YAML.load_file('calculator_messages.yml') 

LANGUAGE = 'en' 

def messages(message, lang='en') 
    MESSAGES[lang][message] 
end 

def prompt(key) 
    message = messages(key, LANGUAGE) # make sure the "messages" method is declared above this line 
    Kernel.puts("=> #{message}") 
end 

def integer?(input) 
    input.to_i.to_s == input 
end 

def float?(input) 
    input.to_f.to_s == input 
end 

def valid_number?(input) 
    integer?(input) || float?(input) 
end 

def operation_to_message(op) 
    word = case op 
     when '1' 
      'Adding' 
     when '2' 
      'Subtracting' 
     when '3' 
      'Multiplying' 
     when '4' 
      'Dividing' 
     end 
    word 
end 

prompt('welcome') 

name = '' 
loop do 
    name = Kernel.gets().chomp() 

    if name.empty?() 
    prompt('valid_name') 
    else 
    break 
    end 
end 

prompt("Hi #{name}!") 

loop do # main loop 
    number1 = '' 
    loop do 
    prompt('first_number') 
    number1 = Kernel.gets().chomp() 

    if valid_number?(number1) 
     break 
    else 
     prompt('not_a_valid_number') 
    end 
    end 

    number2 = '' 
    loop do 
    prompt('second_number') 
    number2 = Kernel.gets().chomp() 

    if valid_number?(number2) 
     break 
    else 
     prompt('not_a_valid_number') 
    end 
    end 

    operator_prompt = <<-MSG 
    What operation would you like to perform? 
    1) add 
    2) subtract 
    3) multiply 
    4) divide 
    MSG 

    prompt(operator_prompt) 

    operator = '' 
    loop do 
    operator = Kernel.gets().chomp() 
    if %w(1 2 3 4).include?(operator) 
     break 
    else 
     prompt('choose_number_range') 
    end 
    end 

    prompt("#{operation_to_message(operator)} the two numbers") 

    result = case operator 
      when '1' 
      number1.to_i() + number2.to_i() 
      when '2' 
      number1.to_i() - number2.to_i() 
      when '3' 
      number1.to_i() * number2.to_i() 
      else 
      number1.to_f()/number2.to_f() 
      end 

    prompt("The answer is: #{result}") 
    prompt('next_step') 
    answer = Kernel.gets().chomp() 
    break unless answer.downcase().start_with?('y') 
end 

prompt('goodbye_msg') 

今ここにはそれがスキップし、特定のコードです:名前に、加算、減算などのメッセージ

prompt("#{operation_to_message(operator)} the two numbers") 
を表示 prompt("Hi #{name}!")
2.表示

3.最後に、結果変数内で実際の回答を出力する部分。

result = case operator 
      when '1' 
      number1.to_i() + number2.to_i() 
      when '2' 
      number1.to_i() - number2.to_i() 
      when '3' 
      number1.to_i() * number2.to_i() 
      else 
      number1.to_f()/number2.to_f() 
      end 

    prompt("The answer is: #{result}") 

なぜこのコードをスキップしているのですか?

+0

これは、上に書かれた正確 –

+0

スキップされている部分1,2,3 –

答えて

2

問題:理解している限り、あなたのpromptメッセージは翻訳しようとしていますが、おそらく、 "こんにちは、フェリックス"。

def messages(message, lang='en') 
    MESSAGES[lang][message] || "NO TRANSLATION FOUND" 
end 

をして、再度出力を観察:

あなたはmessage機能を変更することにより、すぐにこの理論にチェックすることができます。

更新 OPは理論を確認し、コメントで「解決策」を要求したとして、最も安い1があるかもしれない、この1:

def messages(message, lang='en') 
    # Look up translation, default to untranslated message. 
    MESSAGES[lang][message] || message 
end 
+0

"NO TRANSLATION FOUND"が表示されました。これについての修正点は何ですか? –

+0

Eehhmmm、あなた自身でコードを書いたのですか? – Felix