2013年10月24日木曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 13章(新しいクラスの作成と既存クラスの変更), 13.2(クラスの作り方)、13.3(インスタンス変数)、13.4(newとinitialize)、13.5(ベビードラゴンゲーム)、13.6(練習問題の続き)、オレンジの木、を解いてみる。

その他参考書籍

オレンジの木

コード(BBEdit)

sample.rb

#!/usr/bin/env ruby2.0
#-*- coding: utf-8 -*-

class OrangeTree
    def initialize
        @height = 0
        @orange_count = 0
        @alive = true
        @age = 0
        puts 'オレンジの木を植えました!'
    end
    
    def height
        @height
    end
    
    def one_year_passes
        @orange_count = 0
        puts '1年が経過しました。'
        if @age == 10
            @age = nil
            @height = nil
            @alive = false
        end
        if @alive
            @age += 1
            @height += 1
            @orange_count += @age - 4 if @age >= 5
        end
    end
    
    def count_the_orange
        @orange_count
    end
    
    def pick_an_orange
        if @alive
            if @age >= 5
                if @orange_count > 0
                    @orange_count -= 1
                    return 'とてもおいしいオレンジの実が採れました。' 
                else
                    return '今年はもう採れる実がありません。'
                end
            else
                return "樹齢#{@age}なので、まだ採れる実はありません。"
            end
        else
            return '木はもう枯れているので美はとれません。'
        end
    end
end

ot = OrangeTree.new

11.times do
    ot.one_year_passes
    n = ot.count_the_orange
    puts "高さ: #{ot.height} 実の数: #{n}個"
    (n + 1).times do
        puts ot.pick_an_orange
    end
end

入出力結果(Terminal)

$ ./sample.rb
オレンジの木を植えました!
1年が経過しました。
高さ: 1 実の数: 0個
樹齢1なので、まだ採れる実はありません。
1年が経過しました。
高さ: 2 実の数: 0個
樹齢2なので、まだ採れる実はありません。
1年が経過しました。
高さ: 3 実の数: 0個
樹齢3なので、まだ採れる実はありません。
1年が経過しました。
高さ: 4 実の数: 0個
樹齢4なので、まだ採れる実はありません。
1年が経過しました。
高さ: 5 実の数: 1個
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 6 実の数: 2個
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 7 実の数: 3個
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 8 実の数: 4個
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 9 実の数: 5個
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 10 実の数: 6個
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ:  実の数: 0個
木はもう枯れているので美はとれません。
$

ちなみにpython3.4の場合。

コード(BBEdit)

sample.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-

class OrangeTree:
    def __init__(self):
        self._height = 0
        self._orange_count = 0
        self._alive = True
        self._age = 0
        print('オレンジの木を植えました')
    
    def height(self):
        return self._height
    
    def oneYearPasses(self):
        self._orange_count = 0
        print('1年が経過しました。')
        if self._age == 10:
            self._age == None
            self._height = None
            self._alive = False
        if self._alive:
            self._age += 1
            self._height += 1
            if self._age >= 5:
                self._orange_count = self._age - 4
    
    def countTheOrange(self):
        return self._orange_count

    def pickAnOrange(self):
        if self._alive:
            if self._age >= 5:
                if self._orange_count > 0:
                    self._orange_count -= 1
                    return 'とてもおいしいオレンジの実が採れました。'
                else:
                    return '今年はもう採れる実がありません。'
            else:
                return '樹齢{0}なので、まだ採れる実はありません'.format(self._age)
        else:
            return '木はもう枯れているので実は採れません。'

ot = OrangeTree()

for i in range(11):
    ot.oneYearPasses()
    n = ot.countTheOrange()
    print('高さ: {0} 実の数: {1}'.format(ot.height(), ot.countTheOrange()))
    for j in range(n + 1):
        print(ot.pickAnOrange())

入出力結果(Terminal)

$ ./sample.py
オレンジの木を植えました
1年が経過しました。
高さ: 1 実の数: 0
樹齢1なので、まだ採れる実はありません
1年が経過しました。
高さ: 2 実の数: 0
樹齢2なので、まだ採れる実はありません
1年が経過しました。
高さ: 3 実の数: 0
樹齢3なので、まだ採れる実はありません
1年が経過しました。
高さ: 4 実の数: 0
樹齢4なので、まだ採れる実はありません
1年が経過しました。
高さ: 5 実の数: 1
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 6 実の数: 2
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 7 実の数: 3
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 8 実の数: 4
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 9 実の数: 5
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: 10 実の数: 6
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
とてもおいしいオレンジの実が採れました。
今年はもう採れる実がありません。
1年が経過しました。
高さ: None 実の数: 0
木はもう枯れているので実は採れません。
$

0 コメント:

コメントを投稿