【ページ更新日:2020年10月24日】
毎日Pythonでは、簡単なPythonのプログラムコードを紹介していきます。
今日のプログラムはAtCorder2019の問題を使用しています。
競技用プログラミングの問題になります。
問題
問題は次のとおりです。
6つの相異なる整数A,B,C,D,E,Fを入力する。
このうち,3番目に大きい数を表示するプログラムを作成せよ。
AtCorder 第一回アルゴリズム実技検定過去問2019年12月C問題
プログラムコード
問題の解答となるコードは次のとおりです。
※間違いの指摘やアドバイスなどあれば教えてください。
list = [] for i in range(6): list.append(int(input())) for i in range(6): for s in range((6-i)-1): if list[s] < list[s+1]: m = list[s] list[s] = list[s+1] list[s+1] = m print ("3番目に大きい数は {} です".format(list[2]))
ポイント
今回のPythonコードのポイントは次の1点です。
- バブルソート
バブルソート
バブルソートとは、リストにおいて隣り合うふたつの要素の値を比較して条件に応じた交換を行う整列アルゴリズムです。
今回のコードでバブルソートを行なっているのは次の部分です。
for i in range(6): for s in range((6-i)-1): if list[s] < list[s+1]: m = list[s] list[s] = list[s+1] list[s+1] = m
このコードの処理によって、listの要素を大きい順に並び替えます。
今回のコードでは、上記の方法を要素数6で行なっています。
リファクタリング
上記のコードをTwitterでツイートしたところ、レインハルトさん(@rainhult36)にリファクタリングしてもらいました。
リファクタリング (refactoring) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。
リファクタリングしていただいたコードを紹介したいと思います。
コードは次のとおりです。
alist = [int(input()) for _ in range(6)] alist.sort(reverse = True) print(f"3番目に大きい数は {alist[2]} です")
教えていただいた時は、わからない部分も多く勉強したので共有したいと思います。
レインハルトさん(@rainhult36)は処理速度などを考慮しているようですが、すみません、詳しくはわかりません。
内包表記
alist = [int(input()) for _ in range(6)]
sortメソッド
#これでリストalistを大きい順にソートしている alist.sort(reverse = True) #例えば #alist = [5,1,4,2,3,6] #alist.sort = [1,2,3,4,5,6] #alist.sort(reverse = True) = [6,5,4,3,2,1]
文字列のフォーマット
f文字列(f-strings)は、文字列中に置換フィールド{ }をいれてそのまま変数を指定できる。
#これで文字列をフォーマットしている print(f"3番目に大きい数は {alist[2]} です")
これはPython3.6からできるようになったことで、文字列メソッドformatをより簡単に使えるようにしたものです。
文字列のまえに「f」を入れる
文字列中に置換フィールド{ }を入れる
置換フィールド内に変数を指定する