100日後にエンジニアになるキミ - 34日目 - Python - Python演習3

本日はPythonの基礎演習の最後です。

前回はこちら
[100日後にエンジニアになるキミ - 33日目 - Python - Python言語の基礎8]
(https://qiita.com/otupy/items/9e70a3b36f32fccacadf)


## 基礎演習3

[![表示されなかったらすみません](https://img.youtube.com/vi/spvFUatQ6OY/0.jpg)](https://youtu.be/spvFUatQ6OY)

それではこれまでに学習した内容を踏まえて、演習を行っていきましょう。

少し難しめに作ってありますので、
動画を止めながらゆっくり考えて解いてみてください。

### 第一問：

整数`1`から`100`までの`和`を求めるプログラムを作成してみましょう。

### 第二問：

`フィボナッチ数`(0,1,1,2,3,5,8,13・・・)のように
最初の二項は `0`, `1` で、以後どの項もその`直前の2つの項の和`
になるような数の`フィボナッチ数`と言います。

この`フィボナッチ数`を求める`関数`を作成しましょう。
`3桁`の`フィボナッチ数`までを表示させる`関数`にしましょう。

### 第三問：

前項で取り扱った`random`ライブラリの関数を使って
英小文字のaからzか、数字`0`から`9`までの文字だけを使った
`32桁の文字列`を作成するプログラムを作ろう。

`random.randint(最小値、最大値)`
でランダムな整数値が返せる。

### 第四問：

`aabacdcda`
この文字列の`文字別`で`集計`してみよう。

### 第五問：

`景子の夫`、`千鳥`、`メンタリスト`
この３つの`文字列`のうち、１つを`ランダム`で返す`関数`を作って見ましょう。

すぐに答えが出ない人は、動画を止めて考えてみましょう。

コツとしては何を入力したら、どう計算されて、どう出力されるのか
それを考えながら書いてみましょう。


答えはこの下に



## 回答


### 第一問：回答

整数`1`から`100`までの`和`を求めるプログラムを作成してみましょう。

```python
res = 0
# range(1,101)で1から100まで
for i in range(1,101):
    # += で加算
    res += i
print(res)
```
5050

```python
# 上記を内包表記で書くと
print(sum([i for i in range(1,101)]))
```
5050

### 第二問：回答

`フィボナッチ数`(0,1,1,2,3,5,8,13・・・)のように
最初の二項は `0`, `1` で、以後どの項もその`直前の2つの項の和`
になるような数の`フィボナッチ数`と言います。

この`フィボナッチ数`を求める`関数`を作成しましょう。
`3桁`の`フィボナッチ数`までを表示させる`関数`にしましょう。

```python
def fib():
    # まずはじめに変数を２つ用意する
    a = b = 1
    while True:
        print(b)
        # フィボナッチ数は直前の2つの項の和
        a, b = b, a+b
        # 3桁を超えたら抜ける
        if b>999:
            break

# 上記関数の実行
fib()
```
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987

### 第三問：
前項で取り扱った`random`ライブラリの関数を使って
英小文字のaからzか、数字`0`から`9`までの文字だけを使った
`32桁の文字列`を作成するプログラムを作ろう。

`random.randint(最小値、最大値)`
でランダムな整数値が返せる。

```python
import random

# 36個の英数字を用意する
words = 'abcdefghijklmnopqrstuvwxyz0123456789'

# 上記の中からランダムで返すのを32回繰り返して配列を作る
# その配列を join で連結して文字列に変換する
print(''.join([words[random.randint(0,35)] for i in range(32)]))
```
lfkj6bv913np7cq8fxzjjpfjv2u8qv0q


### 第四問：回答

`aabacdcda`
この文字列の`文字別`で`集計`してみよう。

```python
# まずは集計対象の文字を用意
word = 'aabacdcda'

# 結果を格納するための辞書を用意
result_dict = {}
for w in word:
    # 文字があれば +1 なければ1で辞書に格納する
    if w in result_dict:
        result_dict[w]+=1
    else:
        result_dict[w]=1
print(result_dict)
```
{'b': 1, 'c': 2, 'a': 4, 'd': 2}

### 第五問：回答

`景子の夫`、`千鳥`、`メンタリスト`
この３つの`文字列`のうち、１つを`ランダム`で返す`関数`を作って見ましょう。

```python
import random

# 配列を用意する
daigo = ['景子の夫','千鳥','メンタリスト']

# 関数を作る
def random_daigo(daigo):
    # ランダムで整数値を返し、インデックスで上記配列の要素を返す。
    return daigo[random.randint(0,2)]

# 関数の実行
print(random_daigo(daigo))
```
千鳥


`random`ライブラリには直接1つの要素をランダムで返す
`choice`という関数があります。

`random.choice(配列)`

```python
import random

daigo = ['景子の夫','千鳥','メンタリスト']

def random_daigo(daigo):
    return random.choice(daigo)

print(random_daigo(daigo))
```
千鳥


さて、演習はいかがだったでしょうか？
あなたの`wish`は達成されましたか？

プログラミングができるようになると
その`wish`を叶えることができるかもしれませんね。

プログラミングは
まずは真似してコードを書くこと`写経`が上達の鍵になります。
書いて書いて書きまくりましょう。

できなかったところは演習を復習してみてくださいね。




## まとめ

これでPythonの基礎演習も終わりです

基礎が終わったので、文法のほとんどを学習したことになります。
これでPython言語自体のコーディングを進めるのには
支障はなくなったのかなと思います。

あとは自分でコードを書いてみましょう。
コードを書く事がプログラミングの一番大事なことです。

目的を決めて最初は何か簡単なプログラムを作ってみましょう。

よく使われるコードに関してはまとめをチートシートとして作成しておきました。

こちらにリンクを貼っておきますので、是非参考にしてみてください。
https://note.com/otupy/n/n1bedb9f36e54

君がエンジニアになるまであと66日

## 作者の情報

乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython