開発環境
- 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 コメント:
コメントを投稿