2015年11月14日土曜日

【プログラミング】Pythonの勉強 その3 - classを使ってみる -

プログラミング初心者の学習記録です。
今回は前回のプログラムを改造して、条件となる数字を変数にして他の数字も使えるようにします。
プログラムの内容はこんな感じ。
  ・1からnまでの数を数える
  ・aの倍数とaのつく数字(条件1) → 「だぴょーん!」と表示
  ・bの倍数とbのつく数字(条件2) → 「なのです!」と表示
  ・条件1と条件2の両方を満たす数字 → 「だぴょーんなのです!」と表示



「条件1と条件2の両方を満たす」という場合がいろいろあります。前回も書き出しましたが、もれがあることに気づきました。前回はたまたま該当がなかったでわかりませんでした。
両方を満たすパターンは以下のとおりです。
  ・aとbの公倍数
  ・10の位がaで、かつbの倍数
  ・10の位がbで、かつaの倍数
  ・aの倍数で、かつ1の位がbの数
  ・bの倍数で、かつ1の位がaの数
  ・10の位がaで、1の位がbの数
  ・10の位がbで、1の位がaの数
なんと8パターンもありました。ほんと複雑です。


今回はclassを作って関数を定義したいと思います。
「dapyoon_class.py」という名前で、以下のようなモジュールを作りました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# coding:shift-jis
class Dapyoon_class():
    def __init__(self,n,a,b):
        self.N = n
        self.A = a
        self.B = b
    def count(self):
        nn = self.N
        aa = self.A
        bb = self.B
        for x in range(1,nn+1):
            if x%aa == 0 and x%bb == 0:
                print(str(x) + ' だぴょーん' + 'なのです!')
            elif (aa*10)<x<((aa+1)*10) and x%bb == 0:
                print(str(x) + ' だぴょーん' + 'なのです!')
            elif (bb*10)<x<((bb+1)*10) and x%aa == 0:
                print(str(x) + ' だぴょーん' + 'なのです!')
            elif x%aa == 0 and x%10 == bb:
                print(str(x) + ' だぴょーん' + 'なのです!')
            elif x%bb == 0 and x%10 == aa:
                print(str(x) + ' だぴょーん' + 'なのです!')
            elif x == (aa*10)+bb or x == (bb*10)+aa:
                print(str(x) + ' だぴょーん' + 'なのです!')
            elif x%aa == 0 or x%10 == aa or (aa*10)<x<((aa+1)*10):
                print(str(x) + ' だぴょーん!')
            elif x%bb == 0 or x%10 == bb or (bb*10)<x<((bb+1)*10):
                print(str(x) + ' なのです!')
            else:
                print(str(x))
syntax2html

対話モードで次のように打ち込んで実行してみます。
1
2
3
import dapyoon_class
dap = dapyoon_class.Dapyoon_class(80,3,7)
dap.count()
syntax2html

実は「import dapyoon_class.py」と打ち込んでもエラーが出てきたので悩んでしまいました。
importするときは拡張子がいらないんですね。失敗のおかげで学ぶこともあります。

次のように結果が表示されました。

今回はclassを使いましたが、単に関数だけ定義しても良かったように思えます。
どういう時にclassを作ったほうがいいのか、まだよくわかりません。
あと、変数にどんな名前をつけたらいいのかも、よくわかりません。
勉強を進めていけばわかるようになるのかな。


0 件のコメント:

コメントを投稿