2016-12-06 15 views
1

私はこのコードをテストしていますが、期待通りに動作しません。誰かがこれでいくつかの光を当てることができますか?私はそれが実行される最初のエントリに置くが、私は後者のエントリを使用している場合、それが印刷さ 複数のケース/条件付き||

language = { JS: "Websites", Python: "Science", Ruby: "Web apps" } 

puts "What language would you like to know? " 
choice = gets.chomp 
case choice 
when "js" || "JS" 
    puts "Websites!" 
when "Python" || "python" 
    puts "Science!" 
when "Ruby" || "ruby" 
    puts "Web apps!" 
else 
    puts "I don't know!" 
end 

、「私は知りません!」

つまり「js」と入力すると「JS」と入力すると「わからない」というメッセージが表示されます。

+1

@DilAzatした後、他の質問に簡単に

choice = gets.chomp case choice when 'js', 'JS' puts 'Websites!' when 'Python', 'python' puts 'Science!' when 'Ruby', 'ruby' puts 'Web apps!' else puts "I don't know!" end 

をその答えを得ることができ、質問をする前に検索を実行してください:もちろん、あなたが受け取った修正は正しいですが、彼らはドンなぜあなたは観察された振る舞いを持っているのか説明していない:元のコードでは、最初の* when *式は 'choice ===(" js "||" JS ")と等価です。今、 '' js '' || "JS"は "js"に評価されるので、あなたは基本的に 'choice ==" js "'を持っていたので、それは "JS" ''ではうまくいきませんでした。 – user1934428

+0

あなたの指針をありがとう!私は試して、それは魅力として働いた:)しかし、 "js" || "JS"は "js"と評価されるので、基本的に== "js" <==を選択しました。なぜなら、Rubyは大文字と小文字を区別する厳密な言語ではないからです。なぜ "js"は "JS"と同じだと思いますか?事前に百万円ありがとう –

+0

X || Yは 'nil'または' false'のいずれかでない限り、Xに評価されます。この場合、Yと評価されます。 "JS"、 "js"は明らかにnilでもfalseでもないので、 "js"は式の戻り値です。 Rubyは正しい議論を見るのに苦労することはありません。物語の士気:あなたの演算子を学ぶ;-) – user1934428

答えて

4

あなたが提案

choice = gets.chomp 
puts case choice 
     when 'js', 'JS' 
     'Websites!' 
     when 'Python', 'python' 
     'Science!' 
     when 'Ruby', 'ruby' 
     'Web apps!' 
     else 
     "I don't know!" 
     end 
+1

'' puts case choice.downcase'と '' js 'と' Websites! 'の両方を書くことができます。いつ "python"、 "...." –

+0

@CarySwovelandありがとうございました! –

+0

これが当てはまる場合、プログラムは最初にエントリを変更し、基本的に '.downcase'を追加することで、 '||'を入力する必要はありません以下のステートメント、右?私は間違っているかもしれませんが、私が投稿したやり方で書かれた資料を見たような気がします。しかし、あなたたちのおかげで、私は持っていた問題を解決しました。ありがとうございました :) –

関連する問題