2014年8月31日日曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の5章(構造体、共用体、ビットフィールド: 独自の構造を使う)、コンパイラになってみよう(p.251)をpythonで考えてみる。

コンパイラになってみよう(p.251)

コード(BBEdit, Emacs)

sample251.py

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

class Margarita:
    def __init__(self, tequila, cointreau, citrus):
        self.tequila = tequila
        self.cointreau = cointreau
        self.citrus = citrus

    @property
    def p(self):
        result = '{0:2.1f}単位のテキーラ\n{1:2.1f}単位のコアントロー\n'.format(
            self.tequila, self.cointreau)
        if type(self.citrus) == float:
            result += '{0:2.1f}単位のジュース'.format(self.citrus)
        else:
            result += '{0}切れのライム'.format(self.citrus)
        return result

m1 = Margarita(2.0, 1.0, 0.5)
print(m1.p)
# Pythonでは変数の定義時に初期化が必要。宣言のみはできない
try:
    m2
    m2 = Margarita(2.0, 1.0, 0.5)
    print(m2.p)
except Exception as err:
    print(type(err), err)


m3 = ''                                 # 初期化
m3 = Margarita(2.0, 1.0, 0.5)           # 型を気にする必要はない
print(m3.p)

入出力結果(Terminal, IPython)

$ ./sample251.py
2.0単位のテキーラ
1.0単位のコアントロー
0.5単位のジュース
<class 'NameError'> name 'm2' is not defined
2.0単位のテキーラ
1.0単位のコアントロー
0.5単位のジュース
$

0 コメント:

コメントを投稿