変数と配列
このノートの問いがそのまま復習カードになり、忘れかけたころに出題されます。
0. どういうまとまりか
プログラムは、値を変数に入れ、演算して、また変数に入れる、の繰り返しです。
同じ種類の値がたくさんあるときは、1 つの名前でまとめて扱える配列を使います。
| もの | 何か | Python での例 |
|---|---|---|
| 変数 | 値を入れておく、名前のついた入れ物 | x = 5 |
| データ型 | 値の種類(整数・浮動小数点数・文字列・論理型) | 5・2.5・"abc"・True |
| 配列(リスト) | 複数の値を順に並べ、番号(添字)で取り出す | a = [4, 8, 15]、a[0] |
| 2 次元配列 | 配列を要素に持つ配列。表の形 | t[1][2] |
分かれ目は次の 3 つ。
=は「等しい」ではなく代入(右辺の値を左辺の変数に入れる)。等しいかどうかを比べるのは==。//は整数の商、%は余り。/は割り切れても小数(浮動小数点数)になる。- 添字は 0 から始まる。要素が n 個なら、最後の添字は n−1。
1. 変数と代入
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
変数に新しい値を代入すると、前の値は消えて上書きされます。x = x + 1 は「x に 1 を足した値を、改めて x に入れる」という意味で、数式としては読みません。
変数とは何か?
値を入れておくための、名前のついた入れ物
プログラムの中で値を覚えておき、名前で読み書きする。
Python の x = x + 1 は何をする文か?
x = x + 1 は何をする文か?x の今の値に 1 を足し、その結果を改めて x に代入する
= は代入。右辺を先に計算し、左辺の変数を上書きする。
Python で、2 つの値が等しいかどうかを比べる演算子は?
==
= は代入。「等しくない」は !=。
2. データ型と演算子
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
値には種類(データ型)があり、型によってできる演算が違います。
同じ + でも、数どうしなら足し算、文字列どうしならつなぎ合わせ(連結)になります。
| 演算子の種類 | 例 | 結果 |
|---|---|---|
| 算術演算子 | +・-・*・/・//・%・** |
数値 |
| 比較演算子 | ==・!=・<・<=・>・>= |
論理型(True/False) |
| 論理演算子 | and・or・not |
論理型(True/False) |
データ型のうち、真か偽の 2 つの値だけをとる型を何というか?
論理型(ブール型)
Python では True と False。比較演算の結果はこの型になる。
Python で、17 // 5 と 17 % 5 の値は?
17 // 5 と 17 % 5 の値は?17 // 5 は 3(整数の商)、17 % 5 は 2(余り)
17 / 5 は 3.4 で、浮動小数点数になる。
ある整数 n が偶数かどうかは、Python でどう判定するか?
n % 2 == 0 が True かどうかで判定する
2 で割った余りが 0 なら偶数、1 なら奇数。余りの % は「〜の倍数か」を調べる定番。
Python で "3" + "4" の結果は?
"3" + "4" の結果は?"34"(文字列の連結)
文字列どうしの + はつなぎ合わせ。数として足すには int("3") + int("4") のように整数に変換する。
3. 配列と添字
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
配列は、複数の値を 1 つの名前でまとめ、添字(番号)で 1 つずつ取り出す仕組みです。
Python では配列にあたるものをリストといい、[ ] で作ります。
Python のリスト a = [4, 8, 15, 16] で、a[1] の値は?
a = [4, 8, 15, 16] で、a[1] の値は?8
添字は 0 から始まるので、a[0] が 4、a[1] が 8。
要素が n 個の配列で、最後の要素の添字は?
n−1
添字が 0 から始まるため。Python で要素の個数は len(a) で得られる。
2 次元配列 t で、t[i][j] はどの要素を指すか?
t で、t[i][j] はどの要素を指すか?i 番目の配列(行)の、j 番目の要素(列)
t = [[1, 2, 3], [4, 5, 6]] なら t[1][0] は 4。表を行・列で読むのと同じ。
4. データ構造
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
データをどういう形で並べて持つかをデータ構造といいます。
配列のほか、出し入れの順番に決まりを持たせたスタックとキューが代表的です。
データ構造の選び方で、同じ処理でも書きやすさや速さが変わります。
データ構造とは何か?
データを、処理しやすいように一定の形式で並べて保持する仕組み
配列・スタック・キューなど。処理に合ったものを選ぶとアルゴリズムが簡単・高速になる。
スタックは、どの順でデータを取り出すか?
最後に入れたものを最初に取り出す(後入れ先出し・LIFO)
積み重ねた皿を上から取るイメージ。入れるのをプッシュ、取り出すのをポップという。
キューは、どの順でデータを取り出すか?
最初に入れたものを最初に取り出す(先入れ先出し・FIFO)
レジの行列のイメージ。印刷の順番待ちなどに使われる。
練習問題
問 1 次のプログラムを実行すると、何と表示されるか。
a = 7
b = 3
a = a + b
b = a - b
a = a - b
print(a, b)
a = 7
b = 3
a = a + b
b = a - b
a = a - b
print(a, b)
3 7
a が 10 になり、b に 10 から 3 を引いた 7、a に 10 から 7 を引いた 3 が入る。
3 つの代入で a と b の値が入れ替わる(一時的な変数を使わない交換)。
問 2 次のプログラムを実行すると、何と表示されるか。
n = 472
s = n % 10 + n // 10 % 10 + n // 100
print(s)
n = 472
s = n % 10 + n // 10 % 10 + n // 100
print(s)
13
n % 10 は一の位の 2、n // 10 % 10 は 47 を 10 で割った余りで十の位の 7、n // 100 は百の位の 4。
各位の数の和で、2 と 7 と 4 を足して 13。// と % は、左から順に同じ優先順位で計算される。
問 3 次のプログラムを実行すると、何と表示されるか。
t = [[2, 4, 6], [1, 3, 5]]
t[0][1] = t[1][2] * 2
print(t[0][1] + t[1][0], len(t), len(t[0]))
t = [[2, 4, 6], [1, 3, 5]]
t[0][1] = t[1][2] * 2
print(t[0][1] + t[1][0], len(t), len(t[0]))
11 2 3
t[1][2] は 2 行目の 3 番目で 5。その 2 倍の 10 が t[0][1] に入る。t[1][0] は 1 なので、足して 11。len(t) は行の数で 2、len(t[0]) は 1 行目の要素の数で 3。