個人的な備忘録：Python の random 関数を使ってシンプルな数当てゲームを作り、アウトプットしてみた

## はじめに

このドキュメントでは、Python を使ったシンプルな数当てゲームのコードを紹介します。  

:::note info
**このゲームでは、1 から 100 の間でランダムに選ばれた数字を、プレイヤーが試行錯誤しながら当てます。**
:::

コードの実装だけでなく、実際の動作例や解説も含めて、Python の基本的な構造を理解しやすくしています。

## 書こうと思ったきっかけ

Python の基礎を学ぶためには、**実際にコードを書いて試すことが大切** だと感じました。  

:::note warn
***特に「ループ」「条件分岐」「ユーザー入力」などの要素が組み合わさったシンプルなプログラムは、初学者にとって実践的な練習になります。***
:::

そこで、手軽に試せる **数当てゲーム** を題材にし、コードの流れと解説をまとめました。

## 完成したコード

```test.py
import random

def number_guessing_game():
    target = random.randint(1, 100)
    attempts = 0

    print("1 から 100 までの数字を当ててください！")

    while True:
        guess = int(input("予想した数字を入力してください: "))
        attempts += 1

        if guess < target:
            print("もっと大きい数字です！")
        elif guess > target:
            print("もっと小さい数字です！")
        else:
            print(f"正解です！{attempts} 回で当たりました 🎉")
            break

number_guessing_game()
```

### コードの流れ

- **ランダムな数を生成**  
  `random.randint(1, 100)` を使って、1 から 100 の範囲でランダムな数字 (`target`) を決定。  
  ユーザーがこの `target` の数字を当てるのが目的。

- **ゲーム開始のメッセージを表示**  
  `print("1 から 100 までの数字を当ててください！")` でゲーム開始を案内。

- **無限ループでユーザーの入力を受け取る**  
  `while True:` で無限ループを開始し、ユーザーの予想 (`guess`) を入力させる。  
  `attempts` をカウントして、何回目の試行か記録。

- **入力した数字を `target` と比較**  
  - `guess < target` の場合、「もっと大きい数字です！」とヒントを表示。  
  - `guess > target` の場合、「もっと小さい数字です！」とヒントを表示。  
  - `guess == target` の場合、正解メッセージを表示してループを抜ける (`break`)。

- **ゲーム終了**  
  正解したら、何回目で当たったか (`attempts`) を表示して終了。

## 実際に実行してみる
まず、以下のコマンドを実行して作成したコードの動作を確認します。

```bash
python test.py
```

**実行結果**

```bash
 ~/Desktop ((git)-[main])  python test.py
1 から 100 までの数字を当ててください！
予想した数字を入力してください: 2
もっと大きい数字です！
予想した数字を入力してください: 6
もっと大きい数字です！
予想した数字を入力してください: 50
もっと大きい数字です！
予想した数字を入力してください: 80
もっと大きい数字です！
予想した数字を入力してください: 90
もっと小さい数字です！
予想した数字を入力してください: 87
正解です！6 回で当たりました 🎉
```

**実際の画面**

![Screenshot 2025-02-05 at 5.44.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/9e34f48e-d658-7975-577a-37407414e6cd.png)

## コードの解説

### 乱数を生成し、ゲームの準備をする

```py
import random

def number_guessing_game():
    target = random.randint(1, 100)
    attempts = 0

    print("1 から 100 までの数字を当ててください！")
```

**解説**

**random.randint(1, 100) で 1 から 100 の間のランダムな整数 を `target` に設定。**  
→ これがプレイヤーの当てるべき数 になる。

**試行回数 (`attempts`) を 0 にリセット。**  
→ プレイヤーが何回試行したかをカウント するための変数。

**ゲームの開始メッセージを表示。**

### ユーザーの入力を受け取り、比較する

```py
    while True:
        guess = int(input("予想した数字を入力してください: "))
        attempts += 1

        if guess < target:
            print("もっと大きい数字です！")
        elif guess > target:
            print("もっと小さい数字です！")
        else:
            print(f"正解です！{attempts} 回で当たりました 🎉")
            break
```

**解説**

**無限ループ (`while True`) を使い、ユーザーが正解するまで繰り返す。**  

**ユーザーに数値を入力させる (`input()`)。**  
→ 整数 (`int()`) に変換 し、変数 `guess` に格納。  

**試行回数 (`attempts`) を 1 ずつ増やす。** 

**入力値と正解を比較**  
- `guess < target` の場合、「もっと大きい数字です！」 とヒントを出す。  
- `guess > target` の場合、「もっと小さい数字です！」 とヒントを出す。  
- `guess == target` の場合、「正解！」 のメッセージを表示し、`break` でループを終了。

### ゲームを開始する

```py
number_guessing_game()
```

**解説**

`number_guessing_game()` を呼び出し、ゲームをスタート する。

## まとめ
最後までお読みいただき、ありがとうございました。***Python を使ってランダムな数を当てるシンプルなゲームを作ることで、関数の仕組みや活用方法への理解が深まりました。***

今後も、このような基礎的な内容を分かりやすく整理し、丁寧にまとめていこうと思います。