2015/11/13

[勉][py]やむを得ず覚えるpython (3)

急に始めた、特別企画。
「やむを得ず覚えるpython」、略してやむpyです。

まずは文法というか、読む上での知識を付けようとしている。
LINT系のツールもあるようなので、自分で書くようになったら考えよう。
Python の Lint (文法チェッカ) まとめ - flake8 + hacking を使う - - Qiita
知らない言語を自分で覚えたときって「これで大丈夫かなあ」という判断ができないのがきついのだ。

やむpy(2)の最後で書いたソースをhackingというLINTツールにかけると警告が出てきた。
出なくなるまで直すと、こうなった。

  1: #!/usr/bin/python
  2: 
  3: 
  4: class Yebisu(object):
  5:         y = 2
  6: 
  7:         def __init__(self, x):
  8:                 self.x = x
  9: 
 10: 
 11: nihon = Yebisu(1)
 12: print(nihon.x)
 13: Yebisu.y = 3
 14: print(nihon.y)

空行の数なんかも指摘されるのねぇ。

 

過去記事
hiro99ma blog: [勉][py]やむを得ず覚えるpython (1)
hiro99ma blog: [勉][py]やむを得ず覚えるpython (2)


変数

03.py

#!/usr/bin/python
postit = 5
postit = "3M"
print(postit)

$ ./03.py
3M

足し算はできなかったが、中身が差し替わることについてはエラーにならない。

 

配列っぽいのは、[~]で囲む。
「リスト」と呼ぶそうだ。

#!/usr/bin/python
postit = [ 5, 9 ]
print(postit[0])
print(postit[1])

$ ./03.py
5
9

範囲外への代入はエラーになる。

  1: #!/usr/bin/python
  2: postit = [ 5, 9 ]
  3: postit[0] = 2
  4: postit[2] = 4
  5: print(postit[0])
  6: print(postit[1])

$ ./03.py
Traceback (most recent call last):
  File "./03.py", line 4, in <module>
    postit[2] = 4
IndexError: list assignment index out of range

イテレータも使える。

  1: #!/usr/bin/python
  2: postit = [ 5, 9 ]
  3: for val in postit:
  4:         print(val)

 

まぜこぜもいける。

  1: #!/usr/bin/python
  2: postit = [ "pos", 9 ]
  3: for val in postit:
  4:         print(val)

$ ./03.py
pos
9

 

こういうまぜこぜもある。

  1: #!/usr/bin/python
  2: postit1 = [ "pos", 9 ]
  3: postit2 = [ "tit", 2 ]
  4: postits = [ postit1, postit2 ]
  5: for val in postits:
  6:         print(val)

$ ./03.py
['pos', 9]
['tit', 2]

 

足せるの?

  1: #!/usr/bin/python
  2: postit1 = [ "pos", 9 ]
  3: postit2 = [ "tit", 2 ]
  4: postits = postit1 + postit2
  5: for val in postits:
  6:         print(val)

$ ./03.py
pos
9
tit
2

足せるね。

 

添字は負の数も使えるらしい。

  1: #!/usr/bin/python
  2: postit = [ 1, 9 ]
  3: for i in range(-2, 2):
  4:         print("i=%d -> %d" % (i, postit[i]))

$ ./03.py
i=-2 -> 1
i=-1 -> 9
i=0 -> 1
i=1 -> 9

これはちょっとイメージしにくい。
2次元にしてみよう。

  1: #!/usr/bin/python
  2: postit = [[ "(0,0)", "(0,1)" ],  [ "(1,0)", "(1,1)" ]]
  3: for y in range(-2, 2):
  4:         for x in range(-2, 2):
  5:                 print("i=(%d,%d) -> %s" % (x, y, postit[x][y]))

$ ./03.py
i=(-2,-2) -> (0,0)
i=(-1,-2) -> (1,0)
i=(0,-2) -> (0,0)
i=(1,-2) -> (1,0)
i=(-2,-1) -> (0,1)
i=(-1,-1) -> (1,1)
i=(0,-1) -> (0,1)
i=(1,-1) -> (1,1)
i=(-2,0) -> (0,0)
i=(-1,0) -> (1,0)
i=(0,0) -> (0,0)
i=(1,0) -> (1,0)
i=(-2,1) -> (0,1)
i=(-1,1) -> (1,1)
i=(0,1) -> (0,1)
i=(1,1) -> (1,1)

image

原点を中心に回転しているのではなく、単に平行移動しているだけだ。
いや、計算として使いやすいように、とかいう意味かと思ったけど、少なくとも座標を扱うという感じではないみたいだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。