- ベストアンサー
Rubyの初心者ですが壁にぶちあたっております
『初めてのプログラミング』を読んでRubyを勉強しています。その中にある問題でp.127の『ローマ数字をアラビア数字に変換するプログラム』を書け、というのがありまして、最初に入力したローマ数字を弾く部分を書いているのですが…(以下コード) puts 'Enter roman numeral.' roman = gets.chomp.upcase roman_array = roman.to_a def char_checker(char) parts = ['I', 'V', 'X', 'L', 'C', 'D', 'M'] parts.each do |part| if part != char char = false elsif part == char char = true return char end end puts char_checker('X') (以上コード) このchar_checker, なぜかpartsを返してきます。返してほしいのはcharのtrueかfalseなのに泣 書いたコードに間違いがあるのはわかっているのですが、どこで間違っているのかがどうしてもわかりません。わかる方回答よろしくお願いします。ちなみに環境はMac OS X 10.5.4でrubyのバージョンはバンドルされている1.8.6です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- asuncion
- ベストアンサー率33% (2126/6288)
- sakusaker7
- ベストアンサー率62% (800/1280)
- siffon9
- ベストアンサー率64% (136/211)
関連するQ&A
- rubyの構文(&&を用いた条件分岐について)
ruby初心者です。 最近、ruby on railsで書かれたソースを引き継ぎ解析を行っています。 その中で、以下のような構文が出てきました。 ========================================= num = 0 bool = false vals = '' puts 'start' num == 0 && bool && if vals puts 'true' else puts 'false' end puts 'end' ========================================= 上記プログラムを実行すると、if ~ end までが実行されませんでした。 そこで、変数boolをtrueに変更して再実行したところ、if文が実行されました。 そこで私は、上記プログラムは以下と同値であると解釈しました。 ====================================== (省略) if num == 0 && bool if vals puts 'true' else puts 'false' end end ======================================= 以上を踏まえて・・・ 1.私の解釈は正しいでしょうか? 2.間違っている場合、正しい処理の解釈を教えていただけますでしょうか?または参考URLを教えていただけますと助かります。 文の最後に"&&"がついている文を見たことがなく、ネットで調べても 正解らしいものが掲載されていなかったので質問させていただきました。 拙い説明で申し訳ありませんが、よろしくお願いいたします。
- ベストアンサー
- Ruby
- Ruby初心者です。
以下の練習問題をやっているのですが、どうもうまくいきません。 (1)担当名が"end"になる迄、担当名と売上を入力する。 (2)売上合計を求める。 (3)各担当の売上が売上合計の何%になるかの比率の計算を行う。 (4)担当名、売上、比率を表示する。 どこがいけないのがご教授頂けますでしょうか。 よろしくお願い致します。 *********************************** #! ruby -E Windows-31J:utf-8 # coding: utf-8 kensu = 0 uriage = 0 goukei = 0 uriage_t = [20] tanto = [10] tanto = [20][10] puts("担当名がendで終了") print(kensu = kensu + 1, "人目の担当名は") tanto = $stdin.gets.chomp! tanto.gsub!("\n", "") print("売上") uriage = $stdin.gets.chomp!.to_i while tanto != "end" kensu = kensu goukei = goukei + uriage uriage_t = uriage tanto_t = tanto print(kensu = kensu + 1, "人目の担当名は") tanto = $stdin.gets.chomp! tanto.gsub!("\n", "") if tanto != "end" print("売上") uriage = $stdin.gets.chomp!.to_i end end kensu = kensu + 1 goukei = goukei + uriage uriage_t = uriage tanto_t = tanto, "合計" puts "________________________________________" puts " 担当 売上 比率 " puts "________________________________________" for i in kensu kensu += i ritu = uriage * 100 / goukei puts "担当名は#{tanto} 売上は#{uriage_t}円 比率は#{ritu}%" end
- 締切済み
- Ruby
- Rubyの引数が理解できません。(初心者です)
プログラミング言語を覚えたいと考え、諸々の事情からRubyを独学したいとおもっております。 先日、「14歳からはじめるRuby…」という本を購入し、早速勉強を始めたのですが、引数でいきなり躓いてしまいました。 以下のような例文がありましたが、原理(理屈?)が理解できません。ご教唆お願いします。 001 def syomei s 002 puts "" 003 puts "============" 004 puts "" + s 005 puts "============" 006 end 007 puts "What's your name?" 008 name = gets.chomp 009 puts "Hello," + name + "!" 010 syomei name なぜ、これでメソッドの中へ変数が引き渡されるのかが理解できません。 「008 name」で初めて出てくるnameと引数"s"が何故イコールになるのでしょうか? 例えば(全くのデタラメですが)、「010 syomei name.s」であったり「010 syomei name = s」などのように定義付けされているのであれば、納得できるのですが…。 初歩中の初歩なのはわかっているのですが、理屈を理解したいと思ってます。よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- rubyのプログラム
プログラミング初心者です。参考書のソースコードをそのままコピペして実行したのですが、エラーが出てしまいます。どこが間違っているのかご指摘いただけると助かります。 ソースコード #encoding: cp932 # うるう年かどうかによって時間数は変わります puts 24*365 puts " (#{24*366}になる場合もある) " 実行結果 >ruby calc.rb calc.rb:4: invalid multibyte char (Windows-31J) calc.rb:4: syntax error, unexpected tIDENTIFIER, expecting $end puts "(#{24*366}になる場合もある)" ^ >Exit code: 1 パソコンOS Windows7 rubyのバージョン 1.92
- ベストアンサー
- Ruby
- 【ruby】【文法?】ブロックをbreakした時。。
質問を見ていただいて有難うございます。 質問を一言で言うと、 「メソッドの中で呼び出し元がbreakを使った事を検知できるか?」 となるのでしょうか。。。以下に詳しく質問を記述いたします。 引数に配列を渡すと、その配列をブロックに一つずつ返してくれる メソッドhoge()があるとします。 以下の様に使います。 ------------------------------------- hoge([0,1,2]) do |x| puts x end 実行結果 0 1 2 ------------------------------------- このhoge()は、実行中にエラーが発生した場合、トラップして falseを返す事とします。(何事もなければtrueを返します。) このhoge()を以下の様に書きました。 def hoge(arg) begin arg.each do |x| yield x end rescue false else true end end 以下の様に使います。 ------------------------------------- ret=hoge([0,1,2]) do |x| puts x end puts ret ? 'success' : 'fail' 実行結果 0 1 2 success ------------------------------------- ------------------------------------- ret=hoge(nil) do |x| puts x end puts ret ? 'success' : 'fail' 実行結果 fail ------------------------------------- ここまでは、よかったのですが、hoge()のブロックの中で、breakを使うと hoge()の戻り値はnilになってしまいます。 ------------------------------------- ret=hoge([0,1,2]) do |x| break if x==1 puts x end puts ret puts ret ? 'success' : 'fail' 実行結果 0 nil fail ------------------------------------- ここで質問です。 最後の例は、hoge()として異常系ではないので、retにtrueを与えたいのですが、どうしたらよいでしょうか? ご指導のほど、宜しくお願いいたします。
- ベストアンサー
- Ruby
- 【Ruby初心者】簡単なプログラムが実行しない
教材でRubyを勉強中なのですが、以下のプログラムが実行されず爆死しています。 --- puts("整数を入力してね") number = gets.to_i if number > 0 then puts("正の数です!”) end --- 文字コードは、UTF-8で指定、OSはMacです。CotEditorを使用しています。 数字/アルファベットだけのプログラムは正常に実行されるのですが、 文字入りのプログラムがうまく実行されません。 プレビュー見ると文字化けしているので(添付画像参照)、 文字入力にバグが起因していると思われますがお手上げ状態です。
- ベストアンサー
- Ruby
- Ruby バブルソート
バブルソートのプログラムでわからないところがあるため、 質問させていただきます。 Rubyは1.9.3を使用しています。 <プログラム> --------------------------------------------------- def bsort(data) while true # swapped変数は数値の入れ替えを記憶 swapped = false for i in 0..data.size-2 if data[i] > data[i+1] temp = data[i] data[i] = data[i+1] data[i+1] = temp swapped = true end end return if !swapped end end data = [10, 9, 8, 7, 6] bsort(data) puts "ソート結果#{data}" --------------------------------------------------- return if !swapped のところで、 なぜwhileのループから抜けられるのかがよくわかりません。 return if swapped == false と書き換えて実行しても同じ結果が得られたのですが、 数値の入れ替えがなければ swapped = false であるため、 !swappedはtrueとはならないのでしょうか。
- 締切済み
- Ruby
- Rubyのirbで計算を途中でやめることは可能?
(OS: Mac OS X 10.9.1, Rubyのバージョン: 2.0.0 です) Ruby の irb を使用していて, 例えば >> while true >> puts "infinite loop" >> end などと打ち込んでしまって無限ループが起きたときや, その他非常に時間がかかりそうな計算を行っているときに, これを中断する手段というのはあるのでしょうか? (control + Z をすれば irb 自体を中断することはできるようですが, irb自体は中断せずに, 現在行っている処理のみを停止したいということです.)
- ベストアンサー
- Ruby
- Ruby1.9.2でマジックコメントが反映されない
基本的な質問になるのですが、 CentOS5.5でRuby1.9.2を利用しているのですが、スクリプト中に、マジックコメントを 入れているにも関わらず、「invalid multibyte char」エラーが返ってきます。 追加で設定する情報があるのでしょうか。 お手数お掛けしますが、ご存知の方がいらっしゃれば、ご教示ください。 # ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] # cat hello.rb # -*- encoding: utf-8 -*- puts 'こんにちは' # ruby -v hello.rb ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] hello.rb:2: invalid multibyte char (UTF-8) hello.rb:2: invalid multibyte char (UTF-8) # ruby -Ks hello.rb hello.rb:2: invalid multibyte char (UTF-8) hello.rb:2: invalid multibyte char (UTF-8)
- ベストアンサー
- Ruby
- 検索対象を変数に与えてマッチング
Rubyの初心者です。次のサンプルがマッチングできない、 書き方を教えてくださいませんか。 #!/usr/bin/env ruby key = "キーワード" while gets $_.chomp! puts $_ if $_ =~ /"#{key}"/ end puts 文を puts $_ if $_ =~ /キーワード/ に書き買えば、検索はできますが、変数に与えてマッチング することはできないでしょうか。 ご教示を宜しくお願いします。
- ベストアンサー
- Ruby
お礼
すっきりしました。irbすごい便利ですね!ありがとうございます。これからirbを駆使してこのプログラムを完成させたいと思います。またお世話になるかもしれませんが、その時はよろしくお願いします(^_^;)