【Python基礎講座1】リストの操作やif文/for文などを組み合わせて、Colaboratoryでテスト採点システムを作ってみよう

対象読者

Python基礎講座1回目ですので、目的などを説明してから本編に入ります。

まず対象読者ですが、簡単なシステムを作りながら基本的な内容を学習していくので、プログラミング初心者~中級者の方となります。

文法はある程度覚えたけど、まだ自分でプログラムが作れないよって方の参考になればと思っています。

本講座の目的

目的1:動くものを作る

どれだけ文法を暗記してもプログラミングをできるようにはならないです。
どういう時にどういう文法を使えば実際に動くプログラムを作れるか理解してもらうことが重要と考えているため、この講座では簡単なプログラムを作成し、その中で文法も理解してもらえるような構成にしています。

目的2:とにかく手を動かす

私の経験上、プログラミングの学習はとにかく手を動かすことが大事です。
特に初心者の時はプログラミングについての解説を読むよりも自分でコードを書いてみてください。
「自分でコードを書けないよ!」という方は、既に動いているコードの一部を変更し、変更の結果からプログラムの動きがどう変わるかを学んでいってください。
本講座では、こちらで動くコードを用意するので、編集するなり自分で動かすなりして、プログラムの動きを理解していってください。

実行環境

Google製のColaboratoryを使います。
理由としては、環境構築が不要なためです。

今読んでくださってるあなたはプログラミング初心者~中級者の方だと思います。
環境構築は初心者にとって難しく、そこで挫折してしまう可能性が非常に高いです。
やりたいことができずに挫折するのは本当にもったいないと思います。
なので、ブラウザでコードを書き、そのまま実行できるColaboratoryを使います。
既にPythonの開発環境をお持ちの方はそちらを使っていただいても問題ありません。

今回の学習内容

今回の主な学習内容は以下になります。

  • 文字出力
  • リストの操作
  • forループ
  • whileを使った無限ループ
  • ifで条件を指定

作成システムの仕様

今回はテスト採点システムを作っていきます。
受験者の平均点の表示や、取得点数によってA~Cまでのランク付けをします。

正常系の仕様は以下です。

  • 5人分の点数の入力を受け付ける。
  • 点数は100点を満点とする。
  • 80点以上をAとして評価する。
  • 70点以上80点未満をBとして評価する。
  • 60点以上70点未満をCとして評価する。
  • 60点未満は評価の対象外とする。
  • 5人の平均点を表示する。
  • Aを取得した人数を表示する。
  • Bを取得した人数を表示する。
  • Cを取得した人数を表示する。

異常系の仕様は以下です。

  • 0以上100以下の整数以外(小数や文字列)が入力された場合に「0以上100以下の整数を入力してください」と表示する。

正常系の結果は以下のようになります。

腕試しをしたい人は、この仕様を見て自分でコードを書いてみてください。
書き終わったら、以下に私のコードを記載していますので答え合わせをしてみましょう。

仕様通りに動いているなら、あなたのコードも正解です。
なぜなら以下の記事に書いているように、同じ結果になるコードの書き方はいくつもあるためです。

正解できた方には私のコードから得るものがあれば幸いです。

コード

print("5人分の点数を入力してください")
MAX_PEOPLE = 5
MAX_SCORE = 100
MIN_SCORE = 0
SCORE_C = 60
SCORE_B = 70
SCORE_A = 80
ERROR_STR = "0以上100以下の整数を入力してください"

scores = []

for i in range(MAX_PEOPLE):
  while True:
    input_value = input();

    if input_value.isdigit():
      score = int(input_value)
      if score > MAX_SCORE or MIN_SCORE > score :
        print(ERROR_STR)
      else:
        scores.append(score)
        break
    else:
      print(ERROR_STR)

print("")
print("結果は...")
print(f"平均点は{sum(scores) / len(scores)}です")

scores_a = [a for a in scores if a >= SCORE_A]
scores_b = [b for b in scores if b >= SCORE_B and b < SCORE_A]
scores_c = [c for c in scores if c >= SCORE_C and c < SCORE_B]

print(f"成績Aは{len(scores_a)}人")
print(f"成績Bは{len(scores_b)}人")
print(f"成績Cは{len(scores_c)}人")

解説

1行目~9行目
定数を指定しています。

11行目
人数分のループを回します。今回はrange(5)となるため、5回のループになります。
ループの回数を変えたいときはここの数値を変更してください。

12行目~23行目
while Trueで無限ループを用意し、入力を受け付けます。
15行目で整数値かどうかを判定しています。
整数値でなければエラーとし、再度入力を受け付けます。
17行目で入力値が0以上100以下の数字かどうかを判定しています。
異なる場合はエラーとし 、再度入力を受け付けます。
正しい入力がされた場合のみbreakで無限ループを抜けるので、11行目のループがインクリメントされます。

25行目~27行目
平均点を出力しています。

29行目~31行目
各ランクに点数を分類しています。

33行目~最後
分類したランクを出力しています。

最後に

以上、第1回目はこんな感じです。
分かりにくいところや「もっとこうしてほしい」などのご意見がありましたら、ツイッターから連絡いただけると幸いです。
質問に関してもお気軽にお問い合わせください。

以下の記事で応用的な内容を公開しています。
今回の内容が簡単だった人は挑戦してみてください。

私は独学で以下の本からPythonを学びました。
上が初級者向けで下が中級者向けといった感じです。
気が向いたら立ち読みでもしてみてください。

コメント

タイトルとURLをコピーしました