Python 技術ログ 未分類

毎日Python_18日目


【ページ更新日: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) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

https://twitter.com/rainhult36/status/1319640865690644481

リファクタリングしていただいたコードを紹介したいと思います。

コードは次のとおりです。

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文字列の使い方

文字列のまえに「f」を入れる

文字列中に置換フィールド{ }を入れる

置換フィールド内に変数を指定する

  • この記事を書いた人
  • 最新記事

Maita Tomoya / yone

2020.4~Webアプリケーションエンジニアとして都内の企業で働き、空いている時間でブログを運営している29歳男です。本ブログは情報の整理をするため、文章を書く機会を作るために始めました。1記事でも多く「誰かのためになる記事」を書けるように頑張ります!転職前は地方の高校で働いていました。教育関係の記事も定期的に書いていきたいと思います。

-Python, 技術ログ, 未分類