まず、プログラミングっていうのは『こう書けばいい』というものではありません。
プログラミングは『現実世界のシミュレーション』です。
なので、とりあえず、プログラミングでは…とかPythonでは…とかは置いておきましょう。
先に『手作業でやるなら』と考えてみましょう。数学の問題を解くとか、毎日やる作業とかと考えてみるのです。
そうすると、ある意味、
ホワイトボードに”save 生徒名 点数” のように、コマンドのように何行にも連なった処理列がある。あなたはその処理リストを読んで、それらの処理をせよ。
[処理リストの例]
save Tanaka 100
save Yamada 80
save Oosaka 100
…
get Yamada
average
quit
といった感じでしょうか。
そういう場合、どのようにしますか?
私なら、『規則性』を見つけます。
save の構文は常に、
となっています。
それと対になっているであろう、get は、
となっていて、quitやaverageは
のように一単語になっていますね。
save の構文を再度見ると、
のようになっていますね。
つまり、『命令と人名等は「半角スペースによって区切られている」』ですね。
ということは、単純に半角スペースを区切り文字にして読んでいけばいいです。
getも同様にすると、単語数は違えど、半角スペースで区切られています。
quitやaverageは一単語のみで、半角スペースはありませんが、『半角スペースまで、または最後の文字までを一単語とする』と見なせば、条件を満たします。
よって、一行あたりのコマンドは『半角スペースまで、または最後の文字までを一単語とする』と考えることができます。
それでは、ホワイトボードに書かれた処理をやっていきましょう。
[処理リスト]
save Tanaka 100
save Yamada 80
save Oosaka 100
…
get Yamada
average
quit
上記処理リストの最初は、saveですね。
これは規則性から、『Tanakaさんの点数は100点として記録する』ですね。
これはホワイトボードの余白に、
とかみたいに書いていきます。
で、二番目の処理もsaveですね。
なので、
のように追記していく。
三行目以降のsaveも同様にやっていく。
get Yamada のやつは、余白に書いたアレから、Yamada のものを探して、それを結果用のシートかなんかに記述。
average は『平均点を表示』ですから、平均点を算出する。
その都度計算してもいいですが、これが、
average, average, average, average…
のように複数回だとどうなるでしょうか。
計算するのもめんどくさいですね。
流石に同じことを延々に聞くことはありませんが、登録 → 現在の平均点 をループすることはあり得ますね。
毎回やるのは面倒です。
で、よくよく考えると、
平均 = 合計点数 ÷ 人数
ですね。この合計点数は、save時でも計算ができます。
単純に現在の値に足せばいいだけなので。
その合計点数を人数で割ればいいだけです。
quitは単純に処理を終了すればいいだけですし。
これを実装するだけです。
『半角スペースを区切り文字にして…』の読み込みは、『半角スペースを区切り文字として、文字列分割をする』だけでいいです。
そうすれば、saveとかのコマンドだけ取り出すことも可能です。
なので、二次元リストでやればいけそうですね。
Cmd[0][0] とかで取り出せばいいだけですね。
saveの場合やgetの場合とかのように個数が違う場合もあります。
なので、
saveの場合: 1番目と2番目を使う
getの場合: 1番目のみ使う
averageやquitの場合: リスト内のデータは使わない
的な感じで、if文で篩い分けするときに考えればいいだけです。
そして、デバッグまではする。
これが基本です。