順次構造のプログラム

◆ 順次構造

  • 1つの処理が終了したら,次の処理に進む
順次
blackboard bar
meg01

順次構造のプログラムを書くために,printという関数(命令)を利用します。次のプログラムを,ページ下のプログラムボタンから実行してみてください。

文字列を表示するプログラム

  • print("文字列")
blackboard bar

「文字列」っていう文字が表示されました。

2_print1

mana15
meg15

そうです。

print("文字列")とすることで,「文字列」の部分を出力することができます。文字を出力(表示)するときは, 「” ”」(ダブルクォーテーション)で囲みます。

数値を出力するときは「” ”」は不要です。

例)print(3)

どうして文字列の場合と数値の場合で,「" "」をつけたりつけなかったりするのかしら。

mana09
meg15

15 と書いた場合と "15" と書いた場合では別の扱いになります。

15 はプログラムで数値として認識されて数値の計算ができます。

"15" は文字列としての扱いになるので "15" と書いた場合は数値計算はできません。

例えば,

print(15 + 3) は,18と表示されますが,

print("15" +"3")は, 153と表示されます。計算ではなく,15という文字と3という文字を「+」という演算子を使って連結したんですね。

meg15

また,このプログラムの書き方にそって複数書くと,上から順番に表示されていきます。

次のプログラムも,記述して実行してみてください。

文字列を表示するプログラム

  • print("おはよう")
  • print("こんにちは")
  • print("こんばんは")
blackboard bar

上から順番におはよう,こんにちは,こんばんは,が表示されました!

2_print

これが「順次」ってことですね!

gaku05
meg01

そうですね!ちなみにprintでは数値や文字列を組み合わせて出力することもできます。

「+」ではなく「,」が使えます。

  • print(15, "歳")
blackboard bar
meg08

この場合はprint("15歳")と書くのと同じような結果ですが,あとで数字と文字列が混在した状態で連結したい場合も出てくるので,この書き方も覚えておきましょう。

meg01

では実際に順次のプログラムを書いてみましょう。

演習1

  • 先ほどの「おはよう」「こんにちは」「こんばんは」に続けて,「おやすみ」が出力されるようにしましょう。
blackboard bar

演習2

  • 「野球」「サッカー」「水泳」と順に出力されるようにしましょう。
blackboard bar

演習3

  • 数字は数値で,単位は文字列で「10人」「20人」「30人」と順に出力されるようにしましょう。
blackboard bar
meg15

ちなみにさっき,print(15 + 3)は18と出力される,と言いましたが,

print(15 + "歳")では15歳とは出力されずエラーになります(試してみましょう)。 文字列と数字は「+」では連結できません。

2_stringint_error

meg15

ただ,数値を文字列に,文字列を数値に変換するプログラムを記述すると連結できるようになります。プログラムをコピーして試してみましょう。

数値 ↔ 文字変換

  • 数値を文字列にする... str(数値)
  • 文字列を数値(整数)にする... int(数値文字列)
  • 文字列を数値(小数点含む)にする... float(数値文字列)

  • 例) 15歳と出力する
  • print(str(15) + "歳")

  • 例) 数値文字列を数値に変換する
  • print(int("15"))
  • print(float("15.5"))

  • 例) 数値ではない文字列を変換しようとするとエラーになる
  • print(int("15歳")) # 数値ではない
  • print(int("15.5")) # 整数ではない
  • 例) aに1たした数を出力したい
  • a = "5"
  • print(int(a) + 1)
blackboard bar
meg15

5は文字列となっているため,

print(a + 1)ではエラーになりますが,aの前に「int」をつけることで,文字列が数値に変換され,計算できるようになります。

分岐構造のプログラム(1)

meg15

次は「分岐構造」のプログラムですね。

◆ 分岐構造

  • ある条件によって2つの処理のどちらかを選択して実行する構造
bunki
blackboard bar
meg08

ある条件によって分岐するっていうと,どんなものを想像しますか?

そうだな…

ゲームでよくどっちを選ぶ?って聞かれるかな。「このまま続ける?」or「おわる?」とか,「Aのワールドに行く」or「Bのワールドに行く」とか。

gaku10
meg12

そうですね。その例も「どのボタンを選ぶか」という条件によって,その先で表示されるものや画面の展開が変わる分岐構造ですね。

meg01

分岐構造はifというコードを使うことで書くことができます。

ifね!それなら英語といっしょですね!もしこうだったら,という書き方をするのね。

mana04
meg08

そうです。英単語の意味がわかるとプログラムのコードもわかりやすいですね。

meg01

ifと合わせてよく使われる「比較演算子」も確認してみましょう。

よく使われる比較演算子

  • x == y        x と y が等しい
  • x != y         x と y が等しくない
  • x > y          x は y よりも大きい
  • x < y          x は y よりも小さい
  • x >= y        x は y と等しいか大きい
  • x <= y        x は y と等しいか小さい
blackboard bar

もし(if) xとyが等しかったら,っていう感じで,ifと組み合わせて使っていくってことか。

gaku11
meg15

たとえば,みんなの試験の採点結果を表示するプログラムを書いてみると,次のようになります。

コピーしてプログラムを実行してみてください。

if score > 80:のように:コロンをつけるのを忘れないようにしてくださいね!

試験の合否結果を判断するプログラム

  • score = 75
  • if score > 80:
  •   print("合格")
  • else:
  •   print("不合格")
2_2_result
blackboard bar

score が 80 点より高ければ合格,それ以外は不合格ってことね。

この人は score = 75だから…あら。

2_2_gohi_setstumei

mana09
meg08

点数を変えて,合格や不合格がちゃんと出力されるか,試してみましょう。ほかにも分岐するための条件は「論理演算子」というものでもつくれます。

論理演算子

  • ◆ and
  • 例)score > 30 and score < 60
  • scoreが30より高い,かつ,60未満の場合「正」
  • どちらかの条件を満たさない場合「否」

  • ◆ or
  • 例)score > 80 or score < 20
  • scoreが80よりも高いか,scoreが20未満のいずれかの場合「正」
  • どちらも条件を満たさない場合は「否」

  • ◆ not
  • 例)not score > 80
  • 否定。「scoreが80よりも高い」ではない場合「正」

blackboard bar

うおっ,なんか急に難しくなったぞ。

gaku04

たしかに…頭がこんがらがりそう。

mana05
meg08

aとbが両方とも条件にあてはまればこうする,

aとbどちらか一方でもあてはまればこうする,

というような条件設定に使います。

例えばこういうプログラムです。

条件が2つあるプログラムの例

  • math_score = 75
  • english_score = 80
  • if math_score > 80 and english_score > 80:
  •   print("合格")
  • else:
  •   print("不合格")
2_2_result2
blackboard bar

なるほど,数学・英語の成績が両方80点より高くないと合格にならないプログラムですね。

合否判定

mana10
meg12

プログラムを実際つくるときには,設定したい条件に合わせてこの一覧をまた確認してみてくださいね。

こういった論理演算子の書き方はプログラム言語によっても違うので注意しましょう。

meg09

あと,ifの次の行に,インデント(文頭にスペースやタブで字下げしている)があることにも注目してくださいね!

インデントって?

gaku16
meg09

ifの次の行に半角スペースがありますね。

最初にスペースキーやタブキーでスペースをいれることをインデントといいます。

どこからどこまでがifの範囲か,プログラムのかたまりを表しています。

説明

インデントを入れ忘れたり,全角でいれてしまったりすると,エラーになるので要注意です。

エラーメッセージについて(教材の進み具合に余裕のある人は読んでみよう)

meg08

そういえば,間違ってプログラムを書いたとき,何やら難しそうな英文が表示されませんか?

2_2_2_error

みたことあります!どうしたらいいのか困りました...

mana04
meg08

これはエラーコードといって,プログラムの間違っている内容を教えてくれています。

このエラーコードの場合「IndentationError」と書いてあります。インデントに関するエラーがある場合に表示されます。

続けて「expected an indented block」と書いてあり,これは「インデントが無いよ」という意味です。

さらに「line4」と書いています。4行目に間違いがありそうです。ということでプログラムをみてみると,4行目のprintの前に必要なインデントがありませんね。

2_2_2_error2

英語を読んだらエラーの内容がわかるんだ...!

mana04
meg08

そうですね。ただ,難しい英語の場合もあります。英語が読めるとプログラムを書くときには有利なのは間違いありませんが,もしどこにエラーが有るのかわからなかったら,表示されたエラーコードを検索してみるといいかもしれません。

Pythonのエラーコードの例

  • SyntaxError
2-2_7
  • 構文のエラー。「:」が無い,「if」の条件が重複しているなど。この例では2行目のif文の最後に「:」がありません。
  • IndentationError
2-2_8
  • インデントのエラー。必要なインデントがない場合の「expected an indented block」と不要なインデントが入っている場合の「unexpected indent」がこのエラーコードのあとに続く。
  • この例の場合,4行目「else」の前に不要なインデントがあります。
  • TypeError
2-2_9
  • 不可能な演算を書いてしまった場合などのエラー。
  • 例) print("りんご" + 3 + "個")のように,数値と文字列を「+」で結合してしまっている場合。演算子で表すには,「3」を「str(3)」とする必要があります。
blackboard bar

分岐構造のプログラム(2)

meg08

それでは「if」と「比較演算子」を使ったプログラムをつくってみましょう。

よく使われる比較演算子

  • x == y        x と y が等しい
  • x != y         x と y が等しくない
  • x > y          x は y よりも大きい
  • x < y          x は y よりも小さい
  • x >= y        x は y と等しいか大きい
  • x <= y        x は y と等しいか小さい
blackboard bar
meg35

まず,はじめにつくるのは,

国語の成績が80点以上なら「合格」,そうでなければ「不合格」を表示するプログラムです。

meg08

フローチャートで分岐の条件を整理してみましょう。

フローチャート

japanese_scoreは国語の成績のことですね。フローチャートで書くと点数が80点以上かそうでないかで分岐するのがわかりやすくなりますね!

mana04
meg08

プログラムの構造を整理したいときは,フローチャートを書いてみるといいですよ。

meg01

それでは,このフローチャートをプログラムに書いていきましょう。次の演習4に取り組んでください。

参考にさっき解説したプログラムも表示しておきますね(このプログラムよりも簡単な問題です)。

演習4

  • 国語の点数(japanese_score)が 80点以上なら「合格」,そうでなければ「不合格」を表示するプログラムを書きましょう。
  • 国語の成績は75点だったとして,実行してみてください。
  • math_score = 75
  • english_score = 80
  • if math_score > 80 and english_score > 80:
  •   print("合格")
  • else:
  •   print("不合格")

blackboard bar
meg15

では次に,このプログラムを改造して80点以上は合格,60点以上80点未満の場合は追試,60点未満の場合は不合格のプログラムをつくってみましょう(演習5)。

elifを使うと,条件を追加することができますよ。

演習5

  • 国語の点数(japanese_score)が80点以上は「合格」,60点以上80点未満の場合は「追試」,60点未満の場合は「不合格」を表示するプログラムを書きましょう。
  • 国語の成績は75点だったとして,実行してみてください
  • 参考
  • if ...もし~なら(条件1)
  • elif ...条件1以外で,もし~なら
  • else ...どの条件にもあてはならないなら
blackboard bar

条件分岐が増えるんですね。

gaku16
meg15

できたら,japanese_scoreの数字を変更して,正しくプログラムが動くかどうか確かめてくださいね。

meg08

できましたか?以下のように書かれていれば,正しく動作します。

meg04

ここで,もっと理解を深めるために次の演習にもチャレンジしてみましょう!

演習6

  • 下のプログラムで,「合格」と出力される条件を「70点より高い場合」(※70点は追試)に変更しましょう。
  • japanese_score = 75
  • if japanese_score >= 80:
  •   print("合格")
  • elif japanese_score >= 60:
  •   print("追試")
  • else:
  •   print("不合格")
blackboard bar

演習7

  • 体温が37.0度未満の場合は「問題無し」,
  • 37.0度以上,38.0度以下の場合は「要注意」,
  • 38.0度より高い場合は「高熱注意」
  • と表示されるプログラムをつくりましょう。
  • 体温は「taion」とし,さまざまな数値で実行して正しく動作していることを確認しましょう。
blackboard bar
unfold_more 拡大