10の練習問題をやってみよう(二日目)
新しくプログラミング言語を覚えたいときに行うべき10の練習問題
実際にやってみよう。
第三問
複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す(例:同僚の体重を入力して計算)。
昨日は「STDIN」っていう名前の定数を見つけたところまで。
午前中に書店で
- 作者: Dave Thomas,Chad Fowler,Andy Hunt,まつもとゆきひろ,田和勝
- 出版社/メーカー: オーム社
- 発売日: 2006/08/26
- メディア: 大型本
- 購入: 7人 クリック: 270回
- この商品を含むブログ (152件) を見る
この本によると、何も考えずに
gets
ってやると標準入力から一行読んでくることができるんだそうだ。ダンディを思い出した。ゲッツ!
しかしこれだけだと何のことやらさっぱりわからなくて不親切なので
STDIN.readline
って書いておいた方が分かりやすくて良いと思うなあ。
readlineメソッドを使って、繰り返し何度もユーザー入力を受け取るようなモノを書いてみよう。
loop do print "何か入力してね(何も入力しないでEnter押すと終わり)\n" print ">" input = STDIN.readline.chomp break if input.empty? print "「#{input}」が入力されたよ\n" end
うーん・・・「『gets』は主語がなくてわかりにくい」とか書いたけど、それを言うなら「print」もダメってことになるなぁ。
試しに主語をつけてみよう。
loop do STDOUT.print "何か入力してね(何も入力しないでEnter押すと終わり)\n" STDOUT.print ">" input = STDIN.readline.chomp break if input.empty? STDOUT.print "「#{input}」が入力されたよ\n" end
うーん・・・理屈としては「これでいいのだ」って感じなんだけど、さすがにコレは冗長な気がする。
STDINとSTDOUTを取っ払ってみよう。
loop do puts "何か入力してね(何も入力しないでEnter押すと終わり)" print ">" input = gets.chomp break if input.empty? puts "「#{input}」が入力されたよ" end
かなりスッキリした。いやいや、スッキリすればいいってもんじゃない。こんな初心者に優しくない書き方はダメだ。あー、でも、あそこ一行にまとまるなー。まとめたいなー。
loop do puts "何か入力してね(何も入力しないでEnter押すと終わり)" print ">" break if (input = gets.chomp).empty? puts "「#{input}」が入力されたよ" end
まとめてしまった
nums = [] loop do puts "数値を入力してね(何も入力しないでEnter押すと終わり)" print ">" break if (input = gets.chomp).empty? nums << Integer(input) rescue puts "バカ!" end puts "ソート:" + nums.sort.join(",") puts "最大値:" + nums.max puts "最小値:" + nums.min
できてしまった