Python でDIVE麻木コーチが3人の中から代表選手を選ぶ

この記事を読むことで、Pythonの関数の再利用の仕方を学べます。前回作った「選手の競技点数を計算するブログラム」の中から1つ関数を改変し、再利用する事によって、最も得点の高い選手を選べるようにしました。
前回・今回とも、水泳の飛び込みのスポーツ青春ドラマDIVEを具体例にしています。
前回作成した、飛び込みの点数を求める関数プログラムを、まだご覧になっていない方は、上記の記事を先にご覧頂けると、この記事の内容が一層深まると思います。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

軽く前回のおさらいをします。
飛び込み競技は、7人の採点員が採点して、7つの点数のうち、上位2つ及び下位2つの点数を除いた真ん中の点数の平均値を求める事によって、その選手の点数を求めました。
前回は、この関数の名前を「scoring」として、下記のコードを書きました。

import random

#飛び込みの採点をする関数
def scoring():

    #7人の採点員の点数を0.0〜10.0まで0.5刻みの乱数を発生させて求めている
    array=[int(round(random.uniform(0,10),1)*2)/2 for i in range(7)]

    #並び替える前のリストを表示
    print('昇順に並び替える【前】\n'+str(array))

    #リストを昇順に並び替え
    array=sorted(array)

    #並び替えた後のリストを表示
    print('昇順に並び替えた【後】\n'+str(array))

    #スライスを使ってリストから中央の値のみを残す
    mid_array=array[2:5]

    #リストの中央値のみを出力
    print('リストの【中央値】のみ\n'+str(mid_array))

    #3つの中央値から平均点を求めて、それを選手の得点とする
    score=round(sum(mid_array)/len(mid_array),1)

    #選手の点数を表示
    print('あなたの飛び込みの点数は【'+str(score)+'】点です。')

    #得点を戻り値として、呼び出し元に戻る
    return score


#採点する関数scoringを呼び出してスコアを変数scoreに代入する
score=scoring()

この関数を、選手の名前を引数にして呼び出せるように改変します。
選手役の役者さんは、ジャニーズのHiHiJetの方でしたので、キャラクター名を格納するリスト名をhihi_arrayとします。
(知季役:井上瑞稀さん、要一役:作間龍斗さん、飛沫役:高橋優斗さんが、トリプル主演で選手役)
また、3人の得点を格納するリストをscore_hihi_arrayとします。

この2つのリストを関数の外で宣言します。

#キャラクターの名前を入れるリストを用意
hihi_array=['知季','要一','飛沫']

#飛び込み選手の得点を入れるリストを用意
score_hihi_array=[]

では、ここから前回作成した選手の得点を計算する関数scoringを改変していきます。
選手の名前はリストhihi_arrayに格納しているので、まず、この関数の呼び出し元で、選手の名前が引数になる様にして、関数scoringにループで渡せる様に致します。

この関数では知季、要一、飛沫の名前を引数にして麻木夏陽子のコールで3人を飛び込ませ、3人の飛び込みの点数を算出して、score_hihi_arrayに3人の得点を追加させます。

リストhihi_arrayを[‘知季’,’要一’,’飛沫’]としたので、リストのキャラクター名はループを使って関数scoringを呼び出せます。

#ループを使って「リストhihi_array」の名前を引数にして関数scoringを呼び出す
for name in hihi_array:
    #ここで関数scoreを引数にキャラクター名を入れて呼び出している
    score=scoring(name)
    #戻り値として採点結果の点数をリストscore_hihi_arrayに追加している
    score_hihi_array.append(score)

また、呼び出し先の関数scoringに改変を加えた箇所です。

#飛び込みの採点をする関数
def scoring(name):

    #麻木コーチが3人の各選手に飛び込みをさせるように指示する
    print('-------------------------------------------')
    print('麻木コーチ:「'+name+'!! 飛び込みなさい!早く!!!」\n')
    print('バシャ〜〜〜〜〜〜ん。。。'+name+'は飛び込んだ。')

#・・・中略・・・#

  #選手の点数を表示
    print(name+'の飛び込みの点数は【'+str(score)+'】点です。')

これで、「知季、要一、飛沫」のが採点されました。
その採点結果を格納するリストscore_hihi_arrayを表示するコードです。

print(‘3人の得点のリスト’+str(score_hihi_array)+’\n’)

実行結果です。

選手たちの最高点は、得点リストscore_hihi_arrayの値が最も大きく、その最高点の要素がリストscore_hihi_arrayの0か1か2かを求めるのには下記のコードを追記します。最高点の入った要素を変数numに入れるコードです。

num=(score_hihi_array.index(max(score_hihi_array)))

max関数で最高点を求め、index関数でその添字を求めて変数numに代入します。
得点リストと最高点が格納された要素(=num)を求めるコードと実行結果です。

num=(score_hihi_array.index(max(score_hihi_array)))
print('最高点のインデックスは【'+str(num)+'】です。\n')

関数scoringの全コードです。

#【飛び込みの採点をする関数】
def scoring(name):

    #麻木コーチが3人の各選手に飛び込みをさせるように指示する
    print('-------------------------------------------')
    print('麻木コーチ:「'+name+'!! 飛び込みなさい!早く!!!」\n')
    print('バシャ〜〜〜〜〜〜ん。。。「'+name+'」は飛び込んだ。')


    #7人の採点員の点数を0.0〜10.0まで0.5刻みの乱数を発生させて求めている
    array=[int(round(random.uniform(0,10),1)*2)/2 for i in range(7)]

    #並び替える前のリストを表示
    print('昇順に並び替える【前】\n'+str(array))

    #リストを昇順に並び替え
    array=sorted(array)

    #並び替えた後のリストを表示
    print('昇順に並び替えた【後】\n'+str(array))

    #スライスを使ってリストから中央の値のみを残す
    mid_array=array[2:5]

    #リストの中央値のみを出力
    print('リストの【中央値】のみ\n'+str(mid_array))

    #3つの中央値から平均点を求めて、それを選手の得点とする
    score=round(sum(mid_array)/len(mid_array),1)

    #選手の点数を表示
    print('\n<<'+name+'の飛び込みの点数は【'+str(score)+'】点です。>>')
    
    #得点を戻り値として、呼び出し元に戻る
    return score

次項では、この得点リスト(score_hihi_array)をもとに麻木夏陽子コーチが誰を代表に選ぶか決める関数を作ります。
得点リストの最高点の要素が0だったら知季、1だったら要一、2だったら飛沫を代表に選んで激励のメッセージを送ります。
その関数をasakiJudgeをします。

● 関数asakiJudge()

選手の得点の配列の最高値の要素numを引数にして関数asakiJudgeを呼び出し、代表選手に麻木コーチが愛のあるメッセージを送る関数を作ります。
シンプルなIF文で、最高点が入った要素のキャラクター名を呼び出し元に戻しています。

asakiJudge関数のコードです。

#【麻木コーチが誰を代表に選ぶのかを求める関数】
def asakiJudge(num):
    #numによる分岐
    if num==0:
        character='知季'
    elif num==1:
        character='要一'
    else:
        character='飛沫'

    #麻木コーチのメッセージ
    print('麻木コーチ:次の代表は【'+character+'】ね!(ハート)厳しく鍛えるから覚悟しなさい!!!')           

ここでの分岐により、numの添字が0だったら知季、1だったら要一、それ以外だったら飛沫が代表に選ばれます。

では、最後に全コードと実行結果のまとめです。

import random

#【飛び込みの採点をする関数】
def scoring(name):

    #麻木コーチが3人の各選手に飛び込みをさせるように指示する
    print('-------------------------------------------')
    print('麻木コーチ:「'+name+'!! 飛び込みなさい!早く!!!」\n')
    print('バシャ〜〜〜〜〜〜ん。。。「'+name+'」は飛び込んだ。')


    #7人の採点員の点数を0.0〜10.0まで0.5刻みの乱数を発生させて求めている
    array=[int(round(random.uniform(0,10),1)*2)/2 for i in range(7)]

    #並び替える前のリストを表示
    print('昇順に並び替える【前】\n'+str(array))

    #リストを昇順に並び替え
    array=sorted(array)

    #並び替えた後のリストを表示
    print('昇順に並び替えた【後】\n'+str(array))

    #スライスを使ってリストから中央の値のみを残す
    mid_array=array[2:5]

    #リストの中央値のみを出力
    print('リストの【中央値】のみ\n'+str(mid_array))

    #3つの中央値から平均点を求めて、それを選手の得点とする
    score=round(sum(mid_array)/len(mid_array),1)

    #選手の点数を表示
    print('\n<<'+name+'の飛び込みの点数は【'+str(score)+'】点です。>>')
    
    #得点を戻り値として、呼び出し元に戻る
    return score


#【麻木コーチが誰を代表に選ぶのかを求める関数】
def asakiJudge(num):
    #numによる分岐
    if num==0:
        character='知季'
    elif num==1:
        character='要一'
    else:
        character='飛沫'

    #麻木コーチのメッセージ
    print('麻木コーチ:次の代表は【'+character+'】ね!(ハート)厳しく鍛えるから覚悟しなさい!!!')           


#【呼び出し元】
#キャラクターの名前を入れるリストを用意
hihi_array=['知季','要一','飛沫']

#飛び込み選手の得点を入れるリストを用意
score_hihi_array=[]

#ループを使って「リストhihi_array」の名前を引数にして関数scoringを呼び出す
for name in hihi_array:
    #ここで関数scoreを引数にキャラクター名を入れて呼び出している
    score=scoring(name)
    #戻り値として採点結果の点数をリストscore_hihi_arrayに追加している
    score_hihi_array.append(score)

#知季、要一、飛沫の点数を格納したscore_hihi_arrayを表示する。
print('\n-------------------------------------------')
print('3人の得点のリスト'+str(score_hihi_array))

#ここで、変数numに最高点の要素を求めている
num=(score_hihi_array.index(max(score_hihi_array)))
print('最高点のインデックスは【'+str(num)+'】です。\n')


#numを元に麻木コーチが誰を代表に選ぶのかを求める関数を呼び出す
asakiJudge(num)

では、プログラムを実行してみます。
ここでは、要一(要素1)が選ばれた時の結果です。

ループでリストhihi_arrayから「知希」が呼び出され、採点された。

ループでリストhihi_arrayから「要一」が呼び出され、採点された。

ループでリストhihi_arrayから「飛沫」が呼び出され、採点された。

要一が選ばれた時の結果です。

では、知希や飛沫の時も実行してみます。

ここまでご精読ありがとうございました。

HiHiJetの井上瑞稀さん、作間龍斗さん、高橋優斗さんトリプル主演の水泳飛び込み青春ドラマ、DIVEが熱いですね。

麻木夏陽子コーチ役の馬場ふみかさんのファンなので、
このドラマ、井上さん演じる知季の視点で見たいです。
そうしたら何倍も楽しめそうです。
今まで、佐久本宝さん演じる陵くんの視点で見ていました。

DIVEの相関図です。
この相関図は公式なものではなく、私がパソコンを買い換えたことをきっかけに作ってみた私的な作品です。

公式サイト
公式アメブロ

このドラマの感想(ネタバレ含む)はアメブロのこちらに書きました。

放送前
第2話
第3話
第4話
第5話
第6話
第7話

馬場ふみかさんの写真集 ■

同じ人類で、ここまで美しい女性がいるのかと、感動しました!!
最強の被写体であり、たっぷりと曲線美が堪能できます。
「スタイル抜群」とか「ナイスボディ」などといった言葉ではとても収まりきらない程の美しさで、まさに神の造形です。
女性の方で、ファッションに興味のある方でしたら服(水着も含め)の着こなし方や見せ方、角度、ポーズ、表情など凄く勉強になりますので、男女ともに楽しめる写真集です。「好きな男性を振り向かせたい」という女性の方にとって、女性としてのお手本になる写真集だと思います。
私は、資格試験やプログラミング学習のリフレッシュに、馬場ふみかさんの写真集を見て、目の保養にしています。参考書と共に、馬場ふみかさんの写真集を勉強のお供にしていて、楽しく勉強が出来たお陰で、実際にIT系国家資格の基本情報技術者試験(以下FE)に高得点一発合格(点数)出来ました。
20年以上前の平成初期ぐらいに(大学生〜新社会人の頃)情報二種や初級シスアドに2度も落ちてしまった私でさえFEに1発合格が出来たのは、精神的な面で、馬場ふみかさんの写真集やドラマやCM、SNSなどの芸能活動が支えになったからです。
私にとって馬場ふみかさんは、まさに勝利の女神様です!!

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。