Skip to content

Commit d39611a

Browse files
committed
pythonの4〜9章まで作成
1 parent 0b9b779 commit d39611a

File tree

7 files changed

+1237
-5
lines changed

7 files changed

+1237
-5
lines changed

app/sidebar.tsx

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,35 @@ export function Sidebar() {
88
{/* サイドバーが常時表示されている場合のみ */}
99
Navbar Title
1010
</h2>
11-
<ul className="menu w-full">
11+
<ol className="menu w-full list-decimal list-outside">
1212
<li>
13-
<Link href="/python-1">python-1</Link>
13+
<Link href="/python-1">1. 環境構築と基本思想</Link>
1414
</li>
1515
<li>
16-
<Link href="/python-2">python-2</Link>
16+
<Link href="/python-2">2. 基本構文とデータ型</Link>
1717
</li>
1818
<li>
19-
<Link href="/python-3">python-3</Link>
19+
<Link href="/python-3">3. リスト、タプル、辞書、セット</Link>
2020
</li>
21-
</ul>
21+
<li>
22+
<Link href="/python-4">4. 制御構文と関数</Link>
23+
</li>
24+
<li>
25+
<Link href="/python-5">5. モジュールとパッケージ</Link>
26+
</li>
27+
<li>
28+
<Link href="/python-6">6. オブジェクト指向プログラミング</Link>
29+
</li>
30+
<li>
31+
<Link href="/python-7">7. ファイルの入出力とコンテキストマネージャ</Link>
32+
</li>
33+
<li>
34+
<Link href="/python-8">8. 例外処理</Link>
35+
</li>
36+
<li>
37+
<Link href="/python-9">9. ジェネレータとデコレータ</Link>
38+
</li>
39+
</ol>
2240
</div>
2341
);
2442
}

public/docs/python-4.md

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
# 第4章: 制御構文と関数:Pythonらしい書き方
2+
3+
この章では、Pythonの基本的な制御構文(条件分岐、ループ)と関数の定義方法について学びます。他の言語にも同様の機能はありますが、特に`for`ループの振る舞いや、柔軟な引数の渡し方はPythonの大きな特徴です。これらの「Pythonらしい」書き方をマスターすることで、より簡潔で読みやすいコードを書けるようになります。
4+
5+
## if/elif/elseによる条件分岐
6+
7+
Pythonの条件分岐は`if``elif`(else ifの略)、`else`を使って記述します。C言語やJavaのような波括弧`{}`は使わず、**コロン`:`とインデント(通常は半角スペース4つ)**でコードブロックを表現するのが最大の特徴です。
8+
9+
```python
10+
>>> score = 85
11+
>>> if score >= 90:
12+
... print('')
13+
... elif score >= 80:
14+
... print('')
15+
... elif score >= 70:
16+
... print('')
17+
... else:
18+
... print('不可')
19+
...
20+
21+
```
22+
23+
条件式に`and``or``not`といった論理演算子も使用できます。
24+
25+
```python
26+
>>> temp = 25
27+
>>> is_sunny = True
28+
>>> if temp > 20 and is_sunny:
29+
... print("お出かけ日和です")
30+
...
31+
お出かけ日和です
32+
```
33+
34+
## forループとrange()、enumerate()
35+
36+
Pythonの`for`ループは、他の言語の`for (int i = 0; i < 5; i++)`といったカウンタ変数を使うスタイルとは少し異なります。リストやタプル、文字列などの**イテラブル(反復可能)オブジェクト**から要素を1つずつ取り出して処理を実行します。これは、Javaの拡張for文やC\#`foreach`に似ています。
37+
38+
```python
39+
>>> fruits = ['apple', 'banana', 'cherry']
40+
>>> for fruit in fruits:
41+
... print(f"I like {fruit}")
42+
...
43+
I like apple
44+
I like banana
45+
I like cherry
46+
```
47+
48+
### `range()` 関数
49+
50+
決まった回数のループを実行したい場合は、`range()`関数が便利です。`range(n)`は0からn-1までの連続した数値を生成します。
51+
52+
```python
53+
>>> for i in range(5):
54+
... print(i)
55+
...
56+
0
57+
1
58+
2
59+
3
60+
4
61+
```
62+
63+
### `enumerate()` 関数
64+
65+
ループ処理の中で、要素のインデックス(番号)と値の両方を使いたい場合があります。そのような時は`enumerate()`関数を使うと、コードが非常にスッキリします。これは非常にPythonらしい書き方の一つです。
66+
67+
```python
68+
>>> fruits = ['apple', 'banana', 'cherry']
69+
>>> for i, fruit in enumerate(fruits):
70+
... print(f"Index: {i}, Value: {fruit}")
71+
...
72+
Index: 0, Value: apple
73+
Index: 1, Value: banana
74+
Index: 2, Value: cherry
75+
```
76+
77+
## whileループ
78+
79+
`while`ループは、指定された条件が`True`である間、処理を繰り返します。ループを途中で抜けたい場合は`break`を、現在の回の処理をスキップして次の回に進みたい場合は`continue`を使用します。
80+
81+
```python
82+
>>> n = 0
83+
>>> while n < 5:
84+
... print(n)
85+
... n += 1
86+
...
87+
0
88+
1
89+
2
90+
3
91+
4
92+
```
93+
94+
## 関数の定義 (def)
95+
96+
関数は`def`キーワードを使って定義します。ここでもコードブロックはコロン`:`とインデントで示します。値は`return`キーワードで返します。
97+
98+
```python
99+
>>> def greet(name):
100+
... """指定された名前で挨拶を返す関数""" # これはDocstringと呼ばれるドキュメント文字列です
101+
... return f"Hello, {name}!"
102+
...
103+
>>> message = greet("Alice")
104+
>>> print(message)
105+
Hello, Alice!
106+
```
107+
108+
## 引数の渡し方(位置引数、キーワード引数、デフォルト引数値)
109+
110+
Pythonの関数は、非常に柔軟な引数の渡し方ができます。
111+
112+
* **位置引数 (Positional Arguments):** 最も基本的な渡し方で、定義された順序で値を渡します。
113+
* **キーワード引数 (Keyword Arguments):** `引数名=値`の形式で渡します。順序を問わないため、可読性が向上します。
114+
* **デフォルト引数値 (Default Argument Values):** 関数を定義する際に引数にデフォルト値を設定できます。呼び出し時にその引数が省略されると、デフォルト値が使われます。
115+
116+
```python
117+
>>> def describe_pet(animal_type, pet_name, owner_name="Taro"):
118+
... print(f"私には {animal_type} がいます。")
119+
... print(f"名前は {pet_name} で、飼い主は {owner_name} です。")
120+
...
121+
122+
# 位置引数のみで呼び出し
123+
>>> describe_pet("ハムスター", "ジャンボ")
124+
私には ハムスター がいます。
125+
名前は ジャンボ で、飼い主は Taro です。
126+
127+
# キーワード引数で呼び出し(順序を逆にしてもOK)
128+
>>> describe_pet(pet_name="ポチ", animal_type="")
129+
私には 犬 がいます。
130+
名前は ポチ で、飼い主は Taro です。
131+
132+
# デフォルト引数を持つ引数を指定して呼び出し
133+
>>> describe_pet("", "ミケ", "Hanako")
134+
私には 猫 がいます。
135+
名前は ミケ で、飼い主は Hanako です。
136+
```
137+
138+
**注意点:** デフォルト引数を持つ引数は、持たない引数の後に定義する必要があります。
139+
140+
## 可変長引数 (\*args, \*\*kwargs)
141+
142+
関数の引数の数が可変である場合に対応するための仕組みです。
143+
144+
### `*args`
145+
146+
任意の数の**位置引数**をタプルとして受け取ります。慣習的に`args`という名前が使われます。
147+
148+
```python
149+
>>> def sum_all(*numbers):
150+
... print(f"受け取ったタプル: {numbers}")
151+
... total = 0
152+
... for num in numbers:
153+
... total += num
154+
... return total
155+
...
156+
>>> print(sum_all(1, 2, 3))
157+
受け取ったタプル: (1, 2, 3)
158+
6
159+
>>> print(sum_all(10, 20, 30, 40, 50))
160+
受け取ったタプル: (10, 20, 30, 40, 50)
161+
150
162+
```
163+
164+
### `**kwargs`
165+
166+
任意の数の**キーワード引数**を辞書として受け取ります。慣習的に`kwargs` (keyword arguments) という名前が使われます。
167+
168+
```python
169+
>>> def print_profile(**user_info):
170+
... print(f"受け取った辞書: {user_info}")
171+
... for key, value in user_info.items():
172+
... print(f"{key}: {value}")
173+
...
174+
>>> print_profile(name="Sato", age=28, city="Tokyo")
175+
受け取った辞書: {'name': 'Sato', 'age': 28, 'city': 'Tokyo'}
176+
name: Sato
177+
age: 28
178+
city: Tokyo
179+
```
180+
181+
## ラムダ式(Lambda expressions)
182+
183+
`lambda`キーワードを使うと、名前のない小さな**無名関数**を定義できます。複雑な処理には向きませんが、`sorted`関数のキーを指定したり、GUIのコールバック関数を定義したりと、簡単な処理をその場で記述したい場合に非常に便利です。
184+
185+
構文: `lambda 引数: 式`
186+
187+
```python
188+
# 通常の関数で2つの数を足す
189+
>>> def add(x, y):
190+
... return x + y
191+
...
192+
193+
# ラムダ式で同じ処理を定義
194+
>>> add_lambda = lambda x, y: x + y
195+
>>> print(add_lambda(3, 5))
196+
8
197+
198+
# sorted関数のキーとして利用する例
199+
>>> students = [('Taro', 80), ('Jiro', 95), ('Saburo', 75)]
200+
# 成績(タプルの2番目の要素)でソートする
201+
>>> sorted_students = sorted(students, key=lambda student: student[1], reverse=True)
202+
>>> print(sorted_students)
203+
[('Jiro', 95), ('Taro', 80), ('Saburo', 75)]
204+
```

0 commit comments

Comments
 (0)