Rubyのチュートリアル『プログラミング入門 - Rubyを使って - 』9.クラスの『クラスを作る』あたりをPythonでやってみた
クラスを作る
import random class Die: def roll(self): return random.randint(1, 6) dice = [Die(), Die()] for d in dice: print d.roll()
実行結果(乱数なので実行するたび異なる結果に)
1 5
インスタンス変数
import random class Die: def roll(self): self.number_showing = random.randint(1, 6) def showing(self): return self.number_showing die = Die() die.roll() print die.showing() print die.showing() die.roll() print die.showing() print die.showing()
実行結果(ここも乱数)
2 2 3 3
変数いれないで処理
変数number_showingをセット《die.roll()》しないで処理するとエラーになる
die = Die()
print die.showing()
実行結果
AttributeError: Die instance has no attribute 'number_showing'
__init__で初期化
import random class Die: def __init__(self): self.roll() def roll(self): self.number_showing = random.randint(1, 6) def showing(self): return self.number_showing die = Die() print die.showing()
実行結果
3
これでOK(・∀・)b(ここも乱数)
仮想ペット作成プログラム
簡単な仮想ペットを作ってみるのはどうでしょう。赤ちゃんドラゴンです。たいがいの赤ちゃんと同じく、そのドラゴンは、食べ、寝、うんちをします。ということは、食べさせたり、寝かしつけたり、散歩させたり、もできるようにしないといけません。内部では、ドラゴンはおなかがすいているのか、疲れているのか、出かけたいのかなどを記憶している必要があるのですが、赤ちゃんドラゴンにそれを聞いてみてもそれはわかりません。人間の赤ちゃんに「おなかすいた?」と訊いてもしかたがないのと同じです。その代わり、赤ちゃんドラゴンと会話するための別の方法を2,3提供しましょう。そして、彼が生まれる時には名前を付けられるようにします。 (newメソッドに何を渡しても、それはinitializeメソッドに引き継がれます。)
プログラミング入門 - Rubyを使って - 9.クラス
#!/usr/local/bin/python # *-# -*- coding: utf-8 -*- #dragon.py class Dragon: def __init__(self, name): self.name = name self.asleep = False self.stuff_in_belly = 10 self.stuff_in_intestine = 0 print self.name + ' は生まれました' self.exit = False def feed(self): print 'あなたは ' + self.name + 'に食べ物を与えます' self.stuff_in_belly = 10 self.__passage_of_time() def walk(self): print 'あなたは ' + self.name + 'をトイレに連れて行きます' self.stuff_in_intestine = 0 self.__passage_of_time() def put_to_bed(self): print 'あなたは ' + self.name + ' を寝かしつけます' self.asleep = True for n in range(3): if self.asleep: self.__passage_of_time() if self.asleep: print self.name + ' はいびきをかいて、部屋中煙だらけ' if self.asleep: self.asleep = False print self.name + ' はゆっくり目を覚ます' def toss(self): print 'あなたは ' + self.name + ' を空中に投げ上げます.' print '彼はキャハキャハ笑い, あなたの眉毛は焼け焦げた.' self.__passage_of_time() def rock(self): print 'あなたは ' + self.name + ' を優しく揺すります.' self.asleep = True print '彼は短くうとうと...' self.__passage_of_time() if self.asleep: self.asleep = False print '...でもやめるとすぐ起きちゃう.' def __hungry_ask(self): return self.stuff_in_belly <= 2 def __poopy_ask(self): return self.stuff_in_intestine >=8 def __passage_of_time(self): if self.stuff_in_belly > 0: self.stuff_in_belly -= 1 self.stuff_in_intestine += 1 else: if self.asleep: self.asleep = False print '彼は突然跳び起きます!' print self.name + \ ' は飢え死にしそう! 死に物狂いの彼は"あなた"を食べてしまいました!' self.exit = True if self.stuff_in_intestine >= 10: self.stuff_in_intestine = 0 print 'おっと! ' + self.name + ' はやっちゃったようです...' if self.__hungry_ask(): if self.asleep: self.asleep = False print '彼は突然起きます!' if not self.exit: print self.name + 'のおなかはゴロゴロ言ってます...' if self.__poopy_ask(): if self.asleep: self.asleep = False print '彼は突然起きます!' if not self.exit: print self.name + ' はうんちをしたくて踊っています...' if __name__ == "__main__": pet = Dragon('Shenron') pet.feed() pet.toss() pet.walk() pet.put_to_bed() pet.rock() pet.put_to_bed() pet.put_to_bed() pet.put_to_bed() pet.put_to_bed()
実行結果
Shenron は生まれました あなたは Shenronに食べ物を与えます あなたは Shenron を空中に投げ上げます. 彼はキャハキャハ笑い, あなたの眉毛は焼け焦げた. あなたは Shenronをトイレに連れて行きます あなたは Shenron を寝かしつけます Shenron はいびきをかいて、部屋中煙だらけ Shenron はいびきをかいて、部屋中煙だらけ Shenron はいびきをかいて、部屋中煙だらけ Shenron はゆっくり目を覚ます あなたは Shenron を優しく揺すります. 彼は短くうとうと... ...でもやめるとすぐ起きちゃう. あなたは Shenron を寝かしつけます 彼は突然起きます! Shenronのおなかはゴロゴロ言ってます... あなたは Shenron を寝かしつけます 彼は突然起きます! Shenronのおなかはゴロゴロ言ってます... あなたは Shenron を寝かしつけます 彼は突然起きます! Shenronのおなかはゴロゴロ言ってます... Shenron はうんちをしたくて踊っています... あなたは Shenron を寝かしつけます 彼は突然跳び起きます! Shenron は飢え死にしそう! 死に物狂いの彼は"あなた"を食べてしまいました!
そろそろRubyとRuby on Railsの勉強したいなぁ(´・ω・`)