順次処理、反復処理、分岐処理と関数
- ・print関数(表示関数)
- ・順次処理
- ・反復処理
- ・分岐処理(条件分岐文)
- ・関数
次は、何度も使うことになるprint関数(表示関数)を説明しようか。
print関数(表示関数)
(*2)や(*3)でも見せたようにprint関数(表示関数)とは、画面(コードを書くエディタ内でのコンソール等)に文字、数字などを出力(表示)するためにつかうものである。他にもコード内で自分が定義した関数の実行→表示もできる。書き方は簡単で、例えば
Information を表示させたいときは
print(‘Information’) と書く。また、数値の4096を表示させたいときは
print(4096) となる。
上のようにカンマを使えば連結することが可能である。
先ほど文字型や整数型について学んだよね。それについても併せて確認しようか。
この例の場合どんなことが起きるかな、レイさん。
この場合文字型と整数型を足そうとしているので、エラーが出るんじゃないかなぁ。
(*5)
やっぱり!
しっかり覚えていてすごいじゃないか。着実に理解している証拠だよ。
次のうちエラーが出てしまうものはどれか選びなさい。
⓪print(こんにちは)
① s = ‘こんにちは’
print(s)
②print(‘100’ + ‘200’)
③print(100 * ‘100’) (* は掛け算の演算子)
解説
⓪ このコードはprint()の中に文字を入れているため、''か "" が入っていないといけないのでエラーが起こる。
① このコードでは変数 s に ‘こんにちは’の文字列を代入している。つまりこの時点で s は str型になっている。なので print(s) にしても表示がされる。
② このコードでは 100 という文字列と 200 という文字列の結合になるのでエラーは出ない。(実際にこのコードを実行すると 100200 になる。)
③ このコードは 100 という文字列を100個結合する、ということを示す演算なのでエラーは出ない。
さて、今までコードの基礎となる所をやってきたけど、まずプログラミングのコードってどういった処理がされていると思う?
基本的に上から、じゃないの。
もちろんそれもあるよね。その処理の仕方は順次処理と言うよ。これ以外にも反復処理(順次繰返し文、条件繰返し文)、分岐処理(条件分岐文)というものがあるんだ。この3つの処理ができたらたいていのコードはかけるようになるね。
順次処理
反復処理
分岐処理
順次処理
プログラミングで上から順番に処理が行われることである。
この時、上から処理されるため最終的に x には文字列の 10 が代入されている。よってこの文のままではエラーが起こる。
基本的にはこの処理が行われているということなんですね。
そうだね。順に処理されることがインタプリタ型の利点でもあるからね。つぎに反復処理について話そうか。この処理では2つの表し方があるよ。
反復処理
(i)条件繰返し
Pythonでは while文を使う。<条件>が成り立つ間、<処理>を繰り返す。
while文では2行目のように文末に「:」をつける必要がある。
1行目が指すように、変数の式を含む場合、数値の初期化が重要になってくる。
2〜3行目で、最終的に n が10になり、ループを抜け、10 が表示される。
さらに、n = n + 1 となっているところは以下に置き換えることができる。
n += 1
+ のところは ー,*,// などでも表せる。
共通テスト用プログラム表記では、 と表記される。
(ii)順次繰返し
Pythonでは for文を使う。<変数>の値を増やし(減らし)ながら、<処理>を繰り返し実行する。
while文と同様、for文も文末に「:」をつける必要がある。
2〜3行目で、i = i + 1 を10回行うことにより結果として10を得る。
共通テスト用プログラム表記では、 と表記される。
また、range にはほかの使い方もある。
(1)の2行目に関して、range(2,n) 2からnまで、つまり
2≦i≦n-1 の値を1ずつ増やしながら繰り返すことを表す。
さらに、
2行目に関して、range(2,n,2)
2からnまで、つまり
2≦i≦n-1 の値を2ずつ増やしながら繰り返すことを表す。
(1)
(2)
range の使い方をまとめると、
ちなみに、while や for 文これらのループを1回の処理だけで抜けられる方法があるんだ。
breakを使うことでループを壊して抜けられるってことなんですね。
そうだね。最後に分岐処理について知ろうか。
分岐処理(条件分岐文)
Pythonでは if文を使う。条件の分岐には3つのパターンがある。
(i)<条件>が成り立つかどうかによって、実行する処理を切り替える。または、<条件>が成り立つときにある処理を実行する。Pythonでは if を使う。
if文もwhile文やfor文と同様に、文末に「:」をつける必要がある。
i が2の時、i を2で割った余りは0のため、2〜3行目の処理は行われない。
よってそのまま4行目に処理が飛んで結果として 5 が得られる。
共通テスト用プログラム表記では、if文で書かれているところを以下のように書く。
(ii)<条件>が成り立つ時にある処理を実行し、<条件>が成り立たないときに別の処理を実行する場合は、if と elif を組み合わせて指定する。
if と elif は同じラインに書く必要がある。
i が 2の時、iを5で割った余りは2になる。(基本的に整数判断になるから)
よって、実行されるコードは4〜5行目になる。つまり得られる値は 2 となる。
共通テスト用プログラム表記では if と elif のところを以下のように書く。
ちなみに elif はいくらでも使えるよ。別の条件を多くつけることにはダメなことなんてないからね。さらに2つに分岐する場合、if と else の2つを使っても大丈夫だよ。
(理由)if と else を使うと、elseは if の時の条件以外のものすべてを表すからである。
(iii)条件分岐の中で、複数の条件をつける場合、if elif else を使う。
この3つを使う場合の分岐はどうなると思うかい、レイさん。
if で一つの条件、elif でもう一つの条件、else でそれ以外のパターンってことかな。
そういうことだよ。先ほども言ったように、条件を増やすには elif を複数使えばいいからね。最後に関数について学ぼうか。
共通テスト用プログラム表記の場合、以下のように書く。
関数
行いたい処理を定義するもの。
共通テスト用プログラム表記 では2通りの書き方がある。
(i)値を返す関数
値を返す時、基本的にその値は変数に代入される。
例)
(説明)
値xが偶数の時、真(True)を返し、そうでないとき偽(False)を返す関数「偶数(x)」を用意する
y = 偶数(x)
上記の場合、xに3を代入すると False がyの値となる。
問題文で先に(説明)があり、基本的にそのあとに関数を含んだコードが書かれている。
関数の処理内容を抑えるためには問題文をよく読む必要がある。
(ii)値を返さない関数
値を返さない時、関数の処理による値は関数の内部で表示されたりする。
例)(説明)
指定された値を10進数で表示する関数「10進数で表示する」を用意する
10進数で表示する(10101)(10101は2進数である)
上記の場合、10101は1×2^4+1×2^2+1×2*0=21となる。
(i)と同様、関数の処理の説明は問題文に書かれている。しっかり読んで行われる処理内容を抑える必要がある。
Python では def(define) を使う。定義する、ということを意味する。 関数に渡す(入力する)値を引数といい、また関数によって得られる値を戻り値という。
今から見せるコードには新しい知識があるから、まずはそれをまとめようか。
input関数・・・自分で画面に表示するものを入力することができる関数。
n = int(input())
とすると、nに入れる値、文字をキーボード入力することができる。
append・・・リスト(配列)に要素を追加する時に使うもの。
リストを表す li があった時、
li.append(a) とすることで li のリストに変数aを追加することを指す。
以上を踏まえて def に関するコードを見ようか。
これはどうすることを指していると思うかな、レイさん。
はい。まず変数nを入力できるようにして、下には関数 attachi(n)を定義している。その関数内の処理として、p という空のリストを用意し、変数a を 1(i)からnまで、つまり 1≦ a ≦ n - 1 で1ずつ増やしながら7~8行目の処理を繰り替えすよね。
その7~8行目では、
n を a で割った余りが0になるとき、pのリストに割ったときの a の値を追加していく、というものですね。
そして10行目で、この関数の結果として 最終的なリスト p を出力する ということだよね。なんか自分でも全部理解できてることに驚いてるよ!
それはレイさんが頑張って知識、コードの流れを掴んだからだね。改めてこの理解がプログラミングにおいて重要なんだね。
それと、これまで学んだ知識をたくさん組み合わせることによって長いコードが書けるようになるよ。
そうなんだ。なんか面白くなってきちゃった。もっと面白い内容ってあるの?
そうだね。じゃあ次は今まで学んだことを踏まえて、さらに知識を加えたことをやっていこうか。
以下の空欄に入るものを下から選びなさい。
1. Hairetsu = [1,9,11,22,2]
2. atai = 0
3. atai < 4 の間繰り返す:
4. もし Hairetsu[atai]%2 != 0ならば:
5. 表示する(Hairetsu[atai])
6. そうでなければ:
7. Hairetsu[atai] //= 2
8. 表示する(Hairetsu[atai])
9.
10. 出力>>1
11. 9
12. 11
13. 11
解説
このコードで出てくる数として、 atai という変数がある。
Hairetsu[atai] とあるように、 atai は添え字を指す。3~8行目より、ataiが4未満の時に Hairetsu[atai]もしくは Hairetsu[atai]を2で割った商を表示する、となっている。
つまり、 atai の数は4以上になると表示がされなくなるため、Hairetsu[atai]の最後である 2 は反映されないとわかる。(添え字番号4の為)
しかし、空欄に何のコードも入れなかったら、 1 が延々と出力されてしまう。しかし出力結果は10~13行の通り、
1,9,11,11 となっている。 Hairetsu[atai]の数より、1,9,11 は2で割れず、 22 は2で割れる。つまり順番になっているとわかり、ataiが1ずつ増えるコードを入れればいいことになる。
A と B は、1ずつ増えるものではないため間違い。
C と D で違うのは += か =+ になっている点である。このページの 反復処理で表したように、 atai += 1 は atai = atai + 1 を置き換えたものである。
よって正解は C である。