Pythonを学ぼう！: リストとタプルを使った練習問題


---
## はじめに

HI Engineer Collegeでは、実務未経験のエンジニアの方や、エンジニアに興味がある方を募集したおります、まずはお気軽にお問い合わせください。

※ (株)G&T（【内々定まで最短2週間】ゼロからしっかりじっくり研修☆20代活躍中！）

https://gat-company.com/

※ HI Engineer Collegeに興味あがある方はこちら（プログラミングを学習したい方）

https://hiengineer.jp/



---

### エンジニア向けチャットルーム「TechTalk」参加者募集中！

プログラミングやITの話題を気軽に共有し、学び合えるエンジニアのためのチャットルーム「TechTalk」では、新たな参加者を募集中です！

**こんな方にオススメです**
- 最新技術の動向やトレンドを追いかけたい
- 日々の開発で生じる疑問を他のエンジニアに相談したい
- コードレビューの方法やデバッグのコツを知りたい
- 他のエンジニアと共に成長できる場を探している

**チャットルームで扱う主なトピック**
- **プログラミング**: JavaScript、Python、Javaなど、言語やフレームワークについて
- **開発ツール**: Git、Docker、CI/CD の自動化など
- **キャリア**: 転職やキャリアパス、業界動向
- **AI/機械学習**: モデルの開発やトレンド
- **Webセキュリティ**: セキュリティ対策や最新の脅威情報

**チャットルームの特徴**
- 他のエンジニアからリアルタイムでフィードバックがもらえます
- 勉強会やハンズオンセッションも定期開催
- 初心者から上級者まで、幅広いレベルのエンジニアが在籍
- リモートワーク時のちょっとした相談や雑談も大歓迎

**参加方法**
下記リンクから「TechTalk」へぜひご参加ください。

https://line.me/ti/g2/xRolADFbfopNo4vdgA9hmAlAlMgxvaIUSNDx8A?utm_source=invitation&utm_medium=link_copy&utm_campaign=default

---

---

### 問題: リストとタプルを使ったプログラムを作成してください

#### ステップ 1: リストの作成と操作
1. 以下のフルーツ名を含むリストを作成してください：  
   `["りんご", "みかん", "バナナ", "いちご", "ぶどう"]`
2. リストに「パイナップル」を追加してください。
3. リストの最初の要素を削除してください。
4. リストの3番目の要素を表示してください。
5. リストの全ての要素を表示してください。

#### ステップ 2: タプルの作成と操作
1. 以下の野菜名を含むタプルを作成してください：  
   `("にんじん", "トマト", "キャベツ", "レタス", "きゅうり")`
2. タプルの2番目の要素を表示してください。
3. タプルの要素数（長さ）を表示してください。
4. タプルの最初と最後の要素を表示してください。

#### ステップ 3: リストとタプルの違いについて理解する
1. 上記のリストとタプルの違いを説明してください。なぜリストでは要素を追加・削除できるが、タプルではできないのでしょうか？

---

### 解答例

#### ステップ 1: リストの作成と操作

```python
# リストを作成
fruits = ["りんご", "みかん", "バナナ", "いちご", "ぶどう"]

# 「パイナップル」を追加
fruits.append("パイナップル")

# 最初の要素を削除
del fruits[0]

# 3番目の要素を表示
print(f"リストの3番目の要素は: {fruits[2]}")

# リストの全ての要素を表示
print("リストの全ての要素: ", fruits)
```

#### ステップ 2: タプルの作成と操作

```python
# タプルを作成
vegetables = ("にんじん", "トマト", "キャベツ", "レタス", "きゅうり")

# 2番目の要素を表示
print(f"タプルの2番目の要素は: {vegetables[1]}")

# タプルの要素数を表示
print(f"タプルの要素数は: {len(vegetables)}")

# タプルの最初と最後の要素を表示
print(f"タプルの最初の要素は: {vegetables[0]}")
print(f"タプルの最後の要素は: {vegetables[-1]}")
```

#### ステップ 3: リストとタプルの違い

リストとタプルには以下の違いがあります：

1. **リスト**：
   - リストは**可変**で、要素の追加、削除、変更が可能です。
   - `append()` メソッドを使って要素を追加したり、`del` を使って要素を削除できます。

2. **タプル**：
   - タプルは**不変**で、一度作成すると要素を追加、削除、変更することができません。
   - 要素の変更が必要ないデータ（例: 日付や座標など）を保持するために使用されます。

---

### 出力例:
```
リストの3番目の要素は: いちご
リストの全ての要素:  ['みかん', 'バナナ', 'いちご', 'ぶどう', 'パイナップル']
タプルの2番目の要素は: トマト
タプルの要素数は: 5
タプルの最初の要素は: にんじん
タプルの最後の要素は: きゅうり
```

---

リストやタプルを使用した繰り返し、`input`、`if` 文などを使った問題を作成しました。これにより、基本的な構造を組み合わせて実践的な問題に取り組むことができます。

---

### 問題: リストとタプルを使用したフルーツ選択プログラム

以下の指示に従って、Pythonプログラムを作成してください。

#### ステップ 1: フルーツリストとタプルの作成
1. 以下のフルーツ名を含む**リスト**を作成してください：  
   `["りんご", "みかん", "バナナ", "いちご", "ぶどう"]`
2. 以下の野菜名を含む**タプル**を作成してください：  
   `("にんじん", "トマト", "キャベツ", "レタス", "きゅうり")`

#### ステップ 2: フルーツ選択プログラム
1. ユーザーにフルーツリストから1つ選んでもらい、そのフルーツがリストに存在するかどうかを確認してください。
2. フルーツがリストに存在する場合、「[フルーツ名] はリストにあります。」と表示してください。
3. フルーツがリストに存在しない場合、「[フルーツ名] はリストにありません。」と表示してください。
4. 繰り返し処理を使って、ユーザーに何度もフルーツの選択をさせ、"終了" と入力された場合にプログラムを終了させてください。

#### ステップ 3: 野菜を表示
1. プログラム終了後、タプルに含まれる全ての野菜を表示してください。

---

### 解答例

以下に解答例を示します。

```python
# ステップ 1: リストとタプルの作成
fruits = ["りんご", "みかん", "バナナ", "いちご", "ぶどう"]
vegetables = ("にんじん", "トマト", "キャベツ", "レタス", "きゅうり")

# ステップ 2: フルーツ選択プログラム
while True:
    # ユーザーにフルーツを入力してもらう
    selected_fruit = input("リストからフルーツを選んでください（または「終了」と入力して終了）: ")

    # "終了" と入力されたらループを終了する
    if selected_fruit == "終了":
        print("プログラムを終了します。")
        break

    # フルーツがリストにあるかどうかを確認
    if selected_fruit in fruits:
        print(f"{selected_fruit} はリストにあります。")
    else:
        print(f"{selected_fruit} はリストにありません。")

# ステップ 3: タプルの野菜を表示
print("プログラム終了後の野菜リスト:")
for vegetable in vegetables:
    print(vegetable)
```

---

### 出力例

```
リストからフルーツを選んでください（または「終了」と入力して終了）: りんご
りんご はリストにあります。
リストからフルーツを選んでください（または「終了」と入力して終了）: さくらんぼ
さくらんぼ はリストにありません。
リストからフルーツを選んでください（または「終了」と入力して終了）: 終了
プログラムを終了します。
プログラム終了後の野菜リスト:
にんじん
トマト
キャベツ
レタス
きゅうり
```

---

### 問題のポイント

- **リストの操作**：`in` キーワードを使用して、リストに含まれているかを確認します。
- **繰り返し処理**：`while` ループを使い、ユーザーが "終了" と入力するまで繰り返し処理を行います。
- **条件分岐**：`if` 文を使用して、フルーツがリストに存在するかどうかでメッセージを変更します。
- **タプルの表示**：`for` ループを使用して、タプル内の全ての野菜を表示します。

---

この問題を通じて、リストやタプルを使った基本的な操作と、繰り返し、`if` 文、`input` の使い方を学べます。さらに質問や修正があれば教えてください。