Pythonの便利技と注意点:繰り返し編

[目次に戻る](https://qiita.com/yuta-sanjyo/items/416b05f8498df1ed3f49)

# whileループの抜け出し方
普段for文を常用していると、whileを使いたい時に抜け出す方法を忘れてしまうので備忘録

```Py:while文を抜けだすのは、条件となる変数をwhileの前、条件をwhileの中に書く
# 条件となる変数宣言
i = 0

while True:
    i += 1
    print(i)

    # 条件設定
    if i == 3:
        break
```

```:出力結果
1
2
3
```

# elseとの組み合わせ

```Py:繰り返しを最後まで完了するとelseを実行する
for_list = list(range(1, 5))
print(for_list)

for i in for_list:
    print(i)
else:
    print("finish")
```

```Py:出力結果
[1, 2, 3, 4]
1
2
3
4
finish
```

```Py:最後まで完了せずにbreakするとelseの中は実行されない
for_list = list(range(1, 5))
print(for_list)

for i in for_list:
    if i == 3:
        break
    print(i)
else:
    print("finish")
```
```Py:出力結果
[1, 2, 3, 4]
1
2
```

```Py:whileもforと同様、繰り返しを最後まで完了するとelseを実行する
while_list = list(range(1, 5))
print(while_list)

cnt = 0

while cnt < len(while_list):
    print(while_list[cnt])
    cnt += 1
else:
    print("finish")
```

```Py:出力結果
[1, 2, 3, 4]
1
2
3
4
finish
```

```Py:whileも最後まで完了せずにbreakするとelseの中は実行されない
while_list = list(range(1, 5))
print(while_list)

cnt = 0

while cnt < len(while_list):
    if cnt == 3:
        break
    print(while_list[cnt])
    cnt += 1
else:
    print("finish")
```

```Py:出力結果
[1, 2, 3, 4]
1
2
3
```

# enumerate関数でインデックスも一緒にとってくる
```Py:enumerate関数を使わない場合
i = 0
for drink in ['cola', 'green tea', 'water', 'orange juice']:
    print(i, drink)
    i += 1
```

```Py:enumerate関数を使うと2行減らせる
for i, drink in enumerate(['cola', 'green tea', 'water', 'orange juice']):
    print(i, drink)
```

```Py:出力結果
0 cola
1 green tea
2 water
3 orange juice
```

# zip関数で複数要素をまとめて取り出す
```Py:zip関数を使わない場合
week_days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
main_dish = ['Ramen', 'Hamburger', 'Curry', 'Beef', 'Chicken']
drink_menu = ['Woolong tea', 'Cola', 'Water', 'Green tea', 'Coffee']

for i in range(len(week_days)):
    print(week_days[i], ':', main_dish[i], ':', drink_menu[i])
```

```Py:zip関数を使う場合
week_days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
main_dish = ['Ramen', 'Hamburger', 'Curry', 'Beef', 'Chicken']
drink_menu = ['Woolong tea', 'Cola', 'Water', 'Green tea', 'Coffee']

for day, main, drink in zip(week_days, main_dish, drink_menu):
    print(day, ':', main, ':', drink)
```

```Py:出力結果
Mon : Ramen : Woolong tea
Tue : Hamburger : Cola
Wed : Curry : Water
Thu : Beef : Green tea
Fri : Chicken : Coffee
```

# 掛け算九九で格段を下展開する技
```Py:
for i in range(1, 10):
    k = ""
    for j in range(1, 10):
        # iとjを逆にすることで、各段をした展開可能
        k = k + "{}x{}={:2d}  ".format(j, i, i*j)
    print(k)
======================================================================
1x1= 1  2x1= 2  3x1= 3  4x1= 4  5x1= 5  6x1= 6  7x1= 7  8x1= 8  9x1= 9  
1x2= 2  2x2= 4  3x2= 6  4x2= 8  5x2=10  6x2=12  7x2=14  8x2=16  9x2=18  
1x3= 3  2x3= 6  3x3= 9  4x3=12  5x3=15  6x3=18  7x3=21  8x3=24  9x3=27  
1x4= 4  2x4= 8  3x4=12  4x4=16  5x4=20  6x4=24  7x4=28  8x4=32  9x4=36  
1x5= 5  2x5=10  3x5=15  4x5=20  5x5=25  6x5=30  7x5=35  8x5=40  9x5=45  
1x6= 6  2x6=12  3x6=18  4x6=24  5x6=30  6x6=36  7x6=42  8x6=48  9x6=54  
1x7= 7  2x7=14  3x7=21  4x7=28  5x7=35  6x7=42  7x7=49  8x7=56  9x7=63  
1x8= 8  2x8=16  3x8=24  4x8=32  5x8=40  6x8=48  7x8=56  8x8=64  9x8=72  
1x9= 9  2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81  
```

# 階乗を求める
```Py:ポイントは0になった時に1を返す再帰処理を行う
def fact(n):
    if n == 0:
        return 1
    return n * fact(n-1)

# ここでは6の階乗を実行した
for num in range(6):
    print(str(num) + "!: " + str(fact(num)))
============================================
0!: 1
1!: 1
2!: 2
3!: 6
4!: 24
5!: 120
```
[目次に戻る](https://qiita.com/yuta-sanjyo/items/416b05f8498df1ed3f49)