python 練習問題 練習コード

python

【Python】オブジェクト指向の練習問題【勝ち負けの数を表示】

2019年7月2日

こんにちは。


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

 

Pythonのオブジェクト指向については、以下の記事で学習する事が出来ます。

関連記事
Python オブジェクト指向 オブジェクト指向プログラミング
Pythonにおけるオブジェクト指向について解説【入門編その①】

続きを見る

関連記事
Python オブジェクト指向 入門
Pythonにおけるオブジェクト指向について解説【入門編その②】

続きを見る

 

更に、オブジェクト指向の練習問題として以下の問題もあるので、tryしてみて下さい。

関連記事
Python オブジェクト指向 練習問題 入門
【Python】オブジェクト指向の練習問題【診療支援アプリ作成】

続きを見る



では早速みていきましょう。

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

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・・・戻り値を返す

次に、勝敗結果を表すコードを書いてみましょう。

 

print() 引数にはフォーマット済みリテラルを使用しています。

 

prin() の使い方については以下で詳しく解説していますので、参照して下さい。

関連記事
Python print 書き方
Pythonのprintの書き方について【基本から応用まで】

続きを見る

 

フォーマット済みリテラルを忘れてしまった方は以下の記事を参照してください。

関連記事
保護中: 【python】formatメソッドとフォーマット済み文字列の使い方の違い【基本から解説】

続きを見る


In[]

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

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

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

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

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

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

 

for文をイマイチよく分かっていない、または忘れた方は以下の記事でまとめているので、参考にして下さい。

 

関連記事
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 の出力結果は以下になります。

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


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


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


-python
-, , ,

Copyright© Tommy blog  , 2020 All Rights Reserved.