Python で コード を 見やすく

プログラムを書くときは見栄えはとても大切です。
きちんと整理しないと自分でも何のプログラムかわからなくなってしまうことがあります。
そこで、コードの見栄えをよくする方法を教えます。
## スペースは一つではなく四つで

```ruby:Before
for x in l:
 print(x) # 1スペース
 if x == 1:
  print("1!!") # 2スペース
 print("")
```
Pythonでは```for```や```if```などを書くとき```for x in l:```のあとに改行してスペースを入れます。
その時、1スペースではなく、4っつスペースを入力します。
```ruby:after
for x in l:
    print(x) # 4スペース
    if x == 1:
        print("1!!") # 8スペース
    print("")
```
こうする事でどこからループに入っているかなどがはっきりわかります。
2スペースは4倍して8スペースです。
わざわざ4回スペースキーを押すのがめんどくさいときはタブキーを使うといいです。
## 整列
```ruby:Before
a={8:4,2:7,4:1,9:3,42.53:21,61:54.22}
```
パっと何が何に対応しているかわかりません。
こういう時は```,```のあとに改行します。
```ruby:after
a={ 8    :  4,
    2    :  7,
    4    :  1,
    9    :  3,
   42.53 : 21,
   61    : 54.22}
```
少数点、```:```をそろえるのもおすすめです。

こういう場合もあります。
```rudy:Before
def all_add(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18,
 x19):
    return x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + 
x16 + x17 + x18 + x19
```
エディターによりますがこのように勝手に改行されてしまいます。
Pythonは" , "の直ぐ後は改行することが許されます。
しかし、計算式の途中で改行することは許されません。
そのような時は" \ "をつかいます。
" \ "は次の改行を削除してくれます。
つまり
```ruby
1+2+3\
+4+5+6
```
は
```ruby
1+2+3+4+5+6
```
になります。
ついでに縦と揃えます
```ruby:after
def all_add(x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 , x9 , x10,
            x11, x12, x13, x14, x15, x16, x17, x18, x19):
    return x1  + x2  + x3  + x4  + x5  + x6  + x7  + x8  + x9  + x10 \
         + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19
```
逆に次のようなこともできます。
```
def return_one():return 1
# 1

if True:print(True)
# True

print(1);print(2)
# 1
# 2
```
C言語などを使った人はやったことあるかもしれませんが
```;```も改行を意味します。
```:```の後の改行も省くことができます。
しかし次はできません。
```ruby
if True:print(1)
    print(True)
#   File "<stdin>", line 2
#     print(True)
# IndentationError: unexpected indent
```
もしやるなら
```ruby
if True:print(1);print(True)
```
と記述します。
## 型ヒントを使う
型ヒントというのは「この型を使ってほしい」、「この型が出力される」というコメントのようなものです。
以下のように記述します。
```ruby
def float_add_int(a: float, b: int) -> float | int:
    return a + b
```
変数に使うときは```:```で、関数に使うときは```->```を使います。
```|```を使うことで「両方とも使っていいよ」と表します。
```ruby
a: int|float|list # aという変数はint型又はfloat型又はlist型
```
## ```x = x + y```などは```x += y```に
```ruby:Before
y = 0
for x in range(10)
    y = y + x
```
初心者がよくやることです(最初は私もやっていました)。
|演算子|省略後|
|:----:|:----:|
| +    | +=   |
| -    | -=   |
| *    | *=   |
| /    | /=   |
| //   | //=  |
| %    | %=   |
| **   | **=  |
| and  | &=   |
| or   | |=   |
| ^    | ^=   |
| <<   | <<=  |
| >>   | >>=  |
# 応用
下にとても見えにくいプログラムを用意しました。
```ruby:Before
import hmath
__Gamma_list=[676.5203681218851,-1259.1392167224028,771.32342877765313,-176.61502916214059,12.507343278686905,-0.13857109526572012,9.9843695780195716e-6,1.5056327351493116e-7,]
def Gamma(x):
    if hmath.real_part(x)<0.5:
     ans=hmath.pi()/(hmath.sin(hmath.pi()*x)*Gamma(1-x))
    else:
     y=0.99999999999980993
     for i in range(len(__Gamma_list)):
      y=y+__Gamma_list[i]/(x+i)
     t=x+len(__Gamma_list)-1.5
     ans=hmath.sqrt(hmath.tau())*t**(x - 0.5)*hmath.exp(-t)*y
    return ans
```
整理します。
```ruby:after
import hmath
__Gamma_list : list = [
      676.5203681218851      ,
    -1259.1392167224028      ,
      771.32342877765313     ,
     -176.61502916214059     ,
       12.507343278686905    ,
       -0.13857109526572012  ,
        9.9843695780195716e-6,
        1.5056327351493116e-7,
]
def Gamma(x : int | float | complex) -> int | float | complex:
    if hmath.real_part(x) < 0.5:
        ans = hmath.pi() / (hmath.sin(hmath.pi() * x) * Gamma(1 - x))
    else:
        y = 0.99999999999980993
        for (i, Gamma_v) in enumerate(__Gamma_list):
            y += Gamma_v / (x + i)
        t = x + len(__Gamma_list) - 1.5
        ans = hmath.sqrt(hmath.tau()) * t ** (x - 0.5) * hmath.exp(-t) * y
    return ans
```
終了。
ぜひ今回のことを活用してください