開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- Script言語:Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 13章(新しいクラスのオブジェクト), 13.6(練習問題の続き)オレンジの木 を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
オレンジの木
コード(BBEdit)
sample.rb
#!/usr/bin/env ruby1.9 #-*- coding: utf-8 -*- class OrangeTree def initialize puts "オレンジの木を植えました!" @height = 0 @age = 0 @orange_count = 0 @alive = true end def height @height end def age @age end def one_year_passes puts "1年経過しました" if @age == 10 @age = nil @height = nil @orange_count = nil @alive = false end if @alive @orange_count = 0 @age += 1 @height = 5 * @age if @age >= 5 @orange_count = @age * 2 end end end def count_the_orange if @alive return @orange_count else return "もう木は枯れているのでオレンジの実はありません" end end def pick_an_orange if @alive if @orange_count > 0 @orange_count -= 1 return "おいしいオレンジが採れました!" end return "採れる実はありません" else return "もう木は枯れているのでオレンジは採れません" end end end ot = OrangeTree.new 11.times do ot.one_year_passes puts "樹齢:#{ot.age} 高さ:#{ot.height} オレンジの実の数:#{ot.count_the_orange}" i = 1 (ot.count_the_orange.to_i + 1).times do puts "#{i}: #{ot.pick_an_orange}" i += 1 end end
入出力結果(Terminal)
$ ./sample.rb オレンジの木を植えました! 1年経過しました 樹齢:1 高さ:5 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:2 高さ:10 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:3 高さ:15 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:4 高さ:20 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:5 高さ:25 オレンジの実の数:10 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: 採れる実はありません 1年経過しました 樹齢:6 高さ:30 オレンジの実の数:12 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: 採れる実はありません 1年経過しました 樹齢:7 高さ:35 オレンジの実の数:14 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: 採れる実はありません 1年経過しました 樹齢:8 高さ:40 オレンジの実の数:16 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: おいしいオレンジが採れました! 16: おいしいオレンジが採れました! 17: 採れる実はありません 1年経過しました 樹齢:9 高さ:45 オレンジの実の数:18 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: おいしいオレンジが採れました! 16: おいしいオレンジが採れました! 17: おいしいオレンジが採れました! 18: おいしいオレンジが採れました! 19: 採れる実はありません 1年経過しました 樹齢:10 高さ:50 オレンジの実の数:20 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: おいしいオレンジが採れました! 16: おいしいオレンジが採れました! 17: おいしいオレンジが採れました! 18: おいしいオレンジが採れました! 19: おいしいオレンジが採れました! 20: おいしいオレンジが採れました! 21: 採れる実はありません 1年経過しました 樹齢: 高さ: オレンジの実の数:もう木は枯れているのでオレンジの実はありません 1: もう木は枯れているのでオレンジは採れません $
ちなみにJavaScriptの場合。
コード(BBEdit)
var OrangeTree = function(){ var age = 0; var height = 0; var orange_count = 0; var alive = true; this.get_age = function(){ return age; }; this.set_age = function(o){ age = o; }; this.get_height = function(){ return height; }; this.set_height = function(o){ height = o; }; this.get_orange_count = function(){ return orange_count; }; this.set_oranage_count = function(o){ orange_count = o; }; this.get_alive = function(){ return alive; }; this.died = function(){ alive = false; }; }; OrangeTree.prototype.one_year_passes = function(){ $('#pre0').append("1年経過しました\n"); if(this.get_age() === 10){ this.set_age(null); this.set_height(null); this.set_oranage_count(null); this.died(); } if(this.get_alive()){ this.set_oranage_count(0); this.set_age(this.get_age() + 1); this.set_height(5 * this.get_age()); if(this.get_age() >= 5){ this.set_oranage_count(this.get_age() * 2); } } }; OrangeTree.prototype.count_the_orange = function(){ if(this.get_alive()){ return this.get_orange_count(); } else { return "もう木は枯れているのでオレンジの実はありません"; } }; OrangeTree.prototype.pick_an_orange = function(){ if(this.get_alive()){ if(this.get_orange_count() > 0){ this.set_oranage_count(this.get_orange_count() - 1); return "おいしいオレンジが採れました!"; } return "採れる実はありません"; } else { return "もう木は枯れているのでオレンジは採れません"; } }; var ot = new OrangeTree(); for(var i = 0; i < 11; i++){ ot.one_year_passes(); var n = ot.count_the_orange(); $('#pre0').append( "樹齢:" + ot.get_age() + " 高さ:" + ot.get_height() + " オレンジの実の数:" + n + "\n"); for(var j = 0; j < n + 1; j++){ $('#pre0').append((j + 1) + ": " + ot.pick_an_orange() + "\n"); } }
pythonの場合。
sample.py
コード(BBEdit)
#!/usr/bin/env python3.3 # -*- coding: utf-8 -*- class OrangeTree: def __init__(self): print("オレンジの木を植えました!") self._height = 0 self._age = 0 self._orange_count = 0 self._alive = True def get_height(self): return self._height def get_age(self): return self._age def one_year_passes(self): print("1年経過しました") if self._age == 10: self._age = None self._height = None self._orange_count = None self._alive = False if self._alive: self._orange_count = 0 self._age += 1 self._height = 5 * self._age if self._age >= 5: self._orange_count = self._age * 2 def count_the_orange(self): if self._alive: return self._orange_count else: return "もう木は枯れているのでオレンジの実はありません" def pick_an_orange(self): if self._alive: if self._orange_count > 0: self._orange_count -= 1 return "おいしいオレンジが採れました!" return "採れる実はありません" else: return "もう木は枯れているのでオレンジは採れません" ot = OrangeTree() for x in range(11): ot.one_year_passes() n = ot.count_the_orange() print("樹齢:{0} 高さ:{1} オレンジの実の数:{2}".format( ot.get_age(), ot.get_height(), n)) if type(n) == type(10): for y in range(1, n + 2): print("{0}: {1}".format(y , ot.pick_an_orange()))
入出力結果(Terminal)
$ ./sample.py オレンジの木を植えました! 1年経過しました 樹齢:1 高さ:5 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:2 高さ:10 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:3 高さ:15 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:4 高さ:20 オレンジの実の数:0 1: 採れる実はありません 1年経過しました 樹齢:5 高さ:25 オレンジの実の数:10 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: 採れる実はありません 1年経過しました 樹齢:6 高さ:30 オレンジの実の数:12 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: 採れる実はありません 1年経過しました 樹齢:7 高さ:35 オレンジの実の数:14 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: 採れる実はありません 1年経過しました 樹齢:8 高さ:40 オレンジの実の数:16 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: おいしいオレンジが採れました! 16: おいしいオレンジが採れました! 17: 採れる実はありません 1年経過しました 樹齢:9 高さ:45 オレンジの実の数:18 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: おいしいオレンジが採れました! 16: おいしいオレンジが採れました! 17: おいしいオレンジが採れました! 18: おいしいオレンジが採れました! 19: 採れる実はありません 1年経過しました 樹齢:10 高さ:50 オレンジの実の数:20 1: おいしいオレンジが採れました! 2: おいしいオレンジが採れました! 3: おいしいオレンジが採れました! 4: おいしいオレンジが採れました! 5: おいしいオレンジが採れました! 6: おいしいオレンジが採れました! 7: おいしいオレンジが採れました! 8: おいしいオレンジが採れました! 9: おいしいオレンジが採れました! 10: おいしいオレンジが採れました! 11: おいしいオレンジが採れました! 12: おいしいオレンジが採れました! 13: おいしいオレンジが採れました! 14: おいしいオレンジが採れました! 15: おいしいオレンジが採れました! 16: おいしいオレンジが採れました! 17: おいしいオレンジが採れました! 18: おいしいオレンジが採れました! 19: おいしいオレンジが採れました! 20: おいしいオレンジが採れました! 21: 採れる実はありません 1年経過しました 樹齢:None 高さ:None オレンジの実の数:もう木は枯れているのでオレンジの実はありません $
0 コメント:
コメントを投稿