programming2.3.top
  1. ホーム
  2. プログラミング
  3. Pythonと共通テスト用プログラム表記について
  4. 順次処理、反復処理、分岐処理と関数

順次処理、反復処理、分岐処理と関数

次は、何度も使うことになるprint関数(表示関数)を説明しようか。

先生

print関数(表示関数)

(*2)や(*3)でも見せたようにprint関数(表示関数)とは、画面(コードを書くエディタ内でのコンソール等)に文字、数字などを出力(表示)するためにつかうものである。他にもコード内で自分が定義した関数の実行→表示もできる。書き方は簡単で、例えば
Information を表示させたいときは
print(‘Information’) と書く。また、数値の4096を表示させたいときは
print(4096) となる。 上のようにカンマを使えば連結することが可能である。

先ほど文字型や整数型について学んだよね。それについても併せて確認しようか。

先生

この例の場合どんなことが起きるかな、レイさん。

先生
女性

この場合文字型と整数型を足そうとしているので、エラーが出るんじゃないかなぁ。

(*5)

女性

やっぱり!

しっかり覚えていてすごいじゃないか。着実に理解している証拠だよ。

先生
Question3

次のうちエラーが出てしまうものはどれか選びなさい。
⓪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 を出力する ということだよね。なんか自分でも全部理解できてることに驚いてるよ!

それはレイさんが頑張って知識、コードの流れを掴んだからだね。改めてこの理解がプログラミングにおいて重要なんだね。
それと、これまで学んだ知識をたくさん組み合わせることによって長いコードが書けるようになるよ。

先生
女性

そうなんだ。なんか面白くなってきちゃった。もっと面白い内容ってあるの?

そうだね。じゃあ次は今まで学んだことを踏まえて、さらに知識を加えたことをやっていこうか。

先生
Question4

以下の空欄に入るものを下から選びなさい。
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 である。

back
next2