婦人科疾患に関する内容はこちらをご覧ください。

【python】サッカーチームの勝ち負け数を表示する【練習問題】

python 練習問題 練習コード

こんにちわ。


今回は python のうち「オブジェクト指向型プログラミング」に関する練習問題を行いたいと思います。


「オブジェクト指向型プログラミング」に関しては以下の2つの記事を参照にしてください。python オブジェクト指向プログラミング【python】オブジェクト指向プログラミングの基本【分かりやすく解説】python オブジェクト指向プログラミング【python】オブジェクト指向型プログラミングの3原則【継承・多様性・カプセル化】

では早速仕様についてみていきましょう。

仕様|チームの勝ち負け数を表示する

python 練習問題 チームの勝ち負けを表示する

目標は以下のサッカーW杯の勝敗表を python でプログラミングを行い表示させることです。

サッカーW杯 国別勝星ランキング 

順位国名引き分け勝率
1ブラジル731818?
2イタリア452121?
3アルゼンチン431515?
4西ドイツ361414?
5フランス341313?
6ドイツ3166?
7スペイン301515?

【引用】サッカーワールドカップ(ロシア)国別勝敗ランキング 2018年度版

国名の英語名は各々以下になります。

ブラジル:Brazil
イタリア:Italy
アルゼンチン:Argentina
西ドイツ:West Germany
フランス:France
ドイツ:Germany
スペイン:Spain

手順
  • まず、勝負を管理するためのクラスを作成してください。
  • その上で、クラスからインスタンスを6チーム分作成してください。
  • インスタンスを作成後に、各チームの勝負数を表示するプログラムを作成してください。

以下が仕様になります。

仕様
  • football_team.py というファイルを作成し、そこに Football_Teamというクラスを作ってください。
  • 以下のメンバ変数=プロパティを Football_Team に持たせてください。
  1. name (英語での国名)
  2. win (勝数)
  3. lose (負数)
  4. draw (引き分け数)   
  • 勝率は「勝ち数/(勝ち数+負け数)」
  • 勝率は calc_win_rate() メソッドを Football_Team に作ってください。
  • show_team_result() というメソッドを Football_Team に作ってください。
  • use_football_team.py という名前のファイルを作成し、football_team.py からクラスFootball_Team をインポートしてください。
  • use_football_team.py の中で Football_Team のインスタンスを6個作り、各々のチームの名、勝数、負数、引き分け数、勝率を記載します。
  • 表の見出しを表示するコードを記載してください。
  • 国別の各インスタンスの show_team_result() メソッドを呼び出し、勝敗情報を表示してください。
では早速コーディングしていきましょう。

ご自身でtryしてみてコーディングできれば、以下の解説で違いを確認してください。

あくまでもコードの一例ですので、色々な例があります。

実装の手順|チームの勝ち負け数を表示する

python 練習問題 チームの勝ち負けを表示する

入力するファイルを作成する

まずは football_team.py と言うファイルを作成してみましょう。

まずは Footbal_Team というクラスを作り、def __init__ でコンストラクタを定義します。


更に、self の引数を入れることで、初期設定を行います。


次に、勝率を計算するコードを書きましょう。

重要なことは、def calc_win_rate(self): はメソッドですので、値は return で返すか、print で表示することになります。


今回はreturnで返しました。
ところで、return と print の違いがあやふやな方。以下をご参照くださいませ。

  • print()・・・表示する(only)
  • return・・・戻り値を返す
>>【Qiita】printとreturnについて(超基礎)


次に、勝敗結果を表すコードを書いてみましょう。
printの() 引数にはフォーマット済みリテラルを使用しています。
フォーマット済みリテラルを忘れてしまった方は以下の記事を参照してください。【python】formatメソッドとフォーマット済み文字列の使い方の違い【基本から解説】または、以下のサイトが分かりやすいので、参照してください。
>> 【Qiita】Python 3.6で導入されたフォーマット済み文字列リテラル(f’…’)を使えば str.format()より短く書ける。

ここで表示されている f"{self.name:12s}s , {self.win:3d}, {self.lose:3d}dなど、sd が意味していることは何でしょうか。

  • s は文字
  • d は数字
を意味しています。

さらに、最後の :.3f について解説します。

pythonで小数点以下第3位まで表示させて、かつそれ以下は切り捨てで表示させたい場合には、import decimal を使用してください。使い方は以下のサイトを参照くださいませ。
>> 【Qiita】Pythonで少数点以下第3位まで表示して、それ以下は切り捨てて表示させたい。

更に、少数点以下の桁数を指定する時の注意点です。

小数点以下の桁数を指定する時は、置換フィールド {} の中に、コロンとピリオドを続けて {:.桁f} と打ちます。例えば、小数点以下2位で表示したければ、{:.2f} 、3位で表示したければ、 {:.3f} と打ちます。>>HEADBOOST Pythonの桁数や丸めなどの操作のまとめ


for文をイマイチよく分かっていない、または忘れた方は以下のサイトがよくまとまっているので参考にしてください。
>> 【プロナビ】【Python入門】for文を使った繰り返し文の書き方

出力するファイルを作成する。

use_football_team.py として出力するファイルを作成しましょう。

さらに以下を加えます。

次にチームの成績を入力していきます。

最後に teams から team を一つずつ取り出して勝敗の結果を取り出すコードを書きます。


ここで一点間違いがあります。
print(team.show_team_result()) というコードです。
これはクラス内に直接呼出し側のスクリプトを書いて、クラスだけで実行という事をしておりprint(team.show_team_result()) は削除する必要があります。


pythonのfor文は原則「データの集まり」から、「データを一つずつ取り出す」という作業を行うための文法でした。

綺麗に出力できました。
左端の文字列も West_Germany の12文字に合わせて 12d とする事で揃える事ができました。

まとめ|チームの勝ち負け数を表示する

python 練習問題 チームの勝ち負けを表示する

如何でしたでしょうか。

最終的のコードを記載しておきます。

football_team.py

use_football_team.py

use_football_team.py の出力結果は以下になります。

以上答え合わせとして利用してください。


今回はオブジェクト指向型プログラミングの考え方の復習となる練習問題を行いました。


コンストラクタの使用方法やインスタンスメソッドの仕様方法など、この問題を通してよく復習する様にしてください。