Python3エンジニア基礎試験_模擬試験の復習③

# for文の問題

```for.py
friends = ['Mary', 'Diop', 'Eve', 'Mike']
for friend in friends:
    friend = 'Bob'

print(friends)
# ['Mary', 'Diop', 'Eve', 'Mike']
```

● forループの各反復では、変数friendにfriendsリストの要素が代入されます。
　しかし、friend = 'Bob'の代入文は、friend変数に新しい値を割り当てるだけで、
　実際のリストfriendsの要素を変更するわけではありません。
　そのため、print(friends)の出力は、最初の状態である['Mary', 'Diop', 'Eve', 'Mike']となります。

- リストの要素を直接変更するには、インデックスを使用する必要があります。

```for.py
friends = ['Mary', 'Diop', 'Eve', 'Mike']
for i in range(len(friends)):
    friends[i] = 'Bob'

print(friends)
# ['Bob', 'Bob', 'Bob', 'Bob']
```

```for.py
n = 10
lst = [0] * n 
# lst という変数に、要素が1つだけでその値が 0 であるリストを代入し、n乗する

for i in range(n): 
# range(n):0からn-1までの整数を生成する
    lst[i] -= 1 
# lst[i] の値を lst[i] - 1 として再代入することで、要素の値を 1 減少する
    print(lst)
# [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [-1, -1, 0, 0, 0, 0, 0, 0, 0, 0]
# [-1, -1, -1, 0, 0, 0, 0, 0, 0, 0]
# [-1, -1, -1, -1, 0, 0, 0, 0, 0, 0]
# [-1, -1, -1, -1, -1, 0, 0, 0, 0, 0]
# [-1, -1, -1, -1, -1, -1, 0, 0, 0, 0]
# [-1, -1, -1, -1, -1, -1, -1, 0, 0, 0]
# [-1, -1, -1, -1, -1, -1, -1, -1, 0, 0]
# [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0]
# [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
```

● 解説
まず、変数 n に整数値 10 を代入しています。これはリスト lst の要素数を示しています。

次に、リスト lst を作成しています。[0] * n という表現は、
要素が 0 で初期化された長さ n のリストを生成する方法です。
この場合、リスト lst は [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] となります。

その後、for ループを使用してリスト lst の各要素に対して処理を行います。
range(n) は、0 から n-1 までの整数を順番に生成するための<font color="Red">**イテレータ**</font>です。

for ループの中では、各要素 lst[i] に対して -1 を減算しています。
具体的には、lst[0] から順に -1 を引いています。
そして、print(lst) を呼び出すことで、各ループのイテレーションごとに
リスト lst の状態を出力しています。

つまり、このコードは lst の全ての要素に -1 を減算し、
各イテレーションごとにリストの状態を出力するものです。

<font color="Red">**※イテレータ**</font>とは
<font color="Red">**イテレータ（Iterator）は、要素のシーケンスを順番にアクセスするためのオブジェクト**</font>です。
イテレータは、主にループ構造（例えば、for ループ）内で使用され、
要素の反復処理や次の要素への進行を制御します。

イテレータの利点は、大量のデータをメモリに一度に読み込む必要がないことです。
代わりに、必要に応じてデータを逐次的に生成し、効率的に反復処理することができます。

# for文の問題

```for.py
print(range(5))
# range(0, 5)
```

● 解説
range(5)は、0から始まり5未満の数字を生成する範囲オブジェクトを返します。
具体的には、0, 1, 2, 3, 4の数字を生成します。

print()関数は、括弧内の値をコンソールに出力します。
範囲オブジェクトを表す。<font color="Red">**数値の範囲を直接表示するのではなく、
範囲の開始と終了を示す情報を表示しています。**</font>
範囲の開始は0であり、終了は5ですが、終了値は含まれません。

# for文の問題

```for.py
n = 5
for i in range(n): # for ループ変数 in range(処理回数）
    n += 1
    print(n, end = ',')
# 6,7,8,9,10,
```

● 処理の流れ
1. nに初期値として5が代入されます。
2. range(n)は0からn-1までの範囲オブジェクトを生成します。
   この場合は、0から4までの範囲となります。
3. forループが範囲内の各値に対して順番に処理を行います。
4. 各イテレーションでは、nの値が1ずつ増加します。
   つまり、最初のイテレーションではnは6、次のイテレーションでは7となります。
5. 各イテレーションで、現在のnの値が出力されます。
   end=','は、出力の最後に改行文字の代わりにコンマを使用することを指定しています。

# for文の問題

```for.py
for i in range(20):
    if i%3 == 0:
        print("{}は3で割り切れます".format(i), end=' ')
    elif i>8 and i%2 == 0:
        break
# 0は3で割り切れます
# 3は3で割り切れます
# 6は3で割り切れます
# 9は3で割り切れます
```

● 処理の流れ
1. forループが実行されます。iは0から19までの値を順番に取ります。
2. if文が実行されます。iを3で割った余りが0と等しい場合、
   "{}は3で割り切れます".format(i)が表示されます。
   ここで{}はformatメソッドで置き換えられる部分です。
   end=' 'は、改行せずにスペースで終了するように指定しています。
3. elif文が実行されます。もしiが8より大きく、かつ2で割った余りが0と等しい場合、
   ループを中断します。break文によってforループから抜け出し、以降の処理は行われません。
4. 以降、8まで順番に処理され、9が出力された後にelif条件が満たされ、ループが終了します。

# 関数の問題

```func.py
Pythonの関数について正しいものを選択してください。
# 関数をコールするときは、必ず位置引数が先でキーワード引数を後にしなければならない。
```

● 解説
<font color="Red">**位置引数とは、関数呼び出しの際に引数の位置によって値が渡される引数**</font>のことです。
位置引数は関数の定義で指定された順序に従って渡す必要があります。

<font color="Red">**キーワード引数とは、引数の値を指定する際に引数の名前（キーワード）を使用して渡す引数**</font>のことです。キーワード引数は引数の名前と値の組み合わせで指定され、位置の順序に依存しません。

以下、例文。

```func.py
def greet(name, message):
    print(f"{message}, {name}!")

greet("Alice", message="Hello")
# Hello, Alice!
```

この場合、greet関数は2つの引数を受け取ります：nameとmessage。
greet関数を呼び出す際に、<font color="Red">**位置引数とキーワード引数を混在させることができますが、
位置引数が先に来る必要があります。**</font>
上記の例では、位置引数"Alice"が先に指定され、
その後にキーワード引数message="Hello"が指定されています。

しかしこのルールには例外もあります。
<font color="Red">**位置引数がデフォルト値を持つ場合、その位置引数は後ろに置かれることが許されます。**</font>

# 関数の問題

```func.py
def add(a):   
    b = 10
    print(a + b)
a = 3
print(add(a))
# 13
# None
```
●処理の流れ
1. def add(a):：add関数の定義を始めます。引数aを受け取ります。
2. b = 10：変数bを宣言し、値10を代入します。
3. print(a + b)：aとbの和を計算し、結果を表示します。
4. a = 3：変数aに値3を代入します。
5. print(add(a))：add関数を呼び出し、引数として変数aの値を渡します。
   そして、add関数の実行結果を表示します。
   最初の行でa + bの計算結果である13が表示されます。
   次の行では、add関数は値を返していないので、Noneという値が表示されます。

※関数については、もう少し追記予定。