牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

RubyチュートリアルのクラスあたりをPythonでやってみた

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 は飢え死にしそう!  死に物狂いの彼は"あなた"を食べてしまいました!


そろそろRubyRuby on Railsの勉強したいなぁ(´・ω・`)