Python二次元配列ドット絵でインベーダーを書いてみた。

この記事を読むことで、ループとIF文を組み合わせて、Pythonでドット絵を描くことが出来ます。
今回扱うドット絵はインベーダーゲームです。


配列の要素が1だったら「□」、0だったら「半角スペース」をドットとして出力します。
二次元リストを扱うので、列の最後の所まで行ったらドットを出力したのちに改行します。

要素の中身(ドット)と、リストの添字(i,j)を扱うので、enumerateを使います。
リストの最後の要素は、リストの添字が0から始まるので、リストの長さ-1になります。jがリストの長さ-1だったらドットを出力した後に改行をします。

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

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

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

おはこんばんにちは!
うにゃうにゃエンジニアの猫です(=^・^=)
年齢バレバレですが、子どもの頃「インベーダーゲーム」というものをやったことがあります。

そのインベーダーのキャラクターを二次元リストを使ってドット絵で描いてみます。

実行結果とコードです。

コードの詳細を見ていきましょう。
まず、ドット絵を表す二次元リストをこのように作りました。

#インベーダーのドット絵の元になる二次元リスト
invader=[
[0,0,1,0,0,0,0,0,1,0,0],
[0,0,0,1,0,0,0,1,0,0,0],
[0,0,1,1,1,1,1,1,1,0,0],
[0,1,1,0,1,1,1,0,1,1,0],
[1,1,1,1,1,1,1,1,1,1,1],
[1,0,1,1,1,1,1,1,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[0,0,0,1,1,0,1,1,0,0,0]
]

リストの「列の」長さは下記のように求めます。
invader[0]としているのは、リストの長さは各行同じなので、リストinvaderの1行目の、すなわちinvader[0]の長さを求めます。
リストの添字が0から始まるので-1しています。

num=len(invader[0])-1

numに列-1が入りました。

ループの中でIF分岐を使ってドット絵を書いていきます。
行をi、列をjとしています。

jがnumと等しく無い時(j!=num)、1行分のドットを表示させるので、改行させません。
jがnumと等しい時(j==num)は、ドットを出力してから改行しています。

jがnumと等しくない、and(且つ)、ドットが1の時は「□」を出力、ドットが0の時は「半角スペースを出力」しています。

jがnumと等しい、且つ、ドットが1の時、0の時はドットの出力後に改行しています。

for i,chara in enumerate(invader):
   for j,dot in enumerate(chara): 
        if j!=num and dot==1:
                print('□',end='')     
        elif j!=num and dot==0:
                print(' ',end='')    
        else:
            if j==num and dot==1:
                print('□')
            elif j==num and dot==0:
                print(' ')


ここまでの全コードは、この様になります。


#インベーダーのドット絵の元になる二次元リスト
invader=[
[0,0,1,0,0,0,0,0,1,0,0],
[0,0,0,1,0,0,0,1,0,0,0],
[0,0,1,1,1,1,1,1,1,0,0],
[0,1,1,0,1,1,1,0,1,1,0],
[1,1,1,1,1,1,1,1,1,1,1],
[1,0,1,1,1,1,1,1,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[0,0,0,1,1,0,1,1,0,0,0]
]

#インベーダーの二次元リストの列数を求める
num=len(invader[0])-1

#二次元リストの要素が1の時に「■」、0の時は全角スペース
for i,chara in enumerate(invader):
   for j,dot in enumerate(chara): 
        if j!=num and dot==1:
                print('□',end='')     
        elif j!=num and dot==0:
                print(' ',end='')    
        else:
            if j==num and dot==1:
                print('□')
            elif j==num and dot==0:
                print(' ')

最後までお読みいただきありがとうございました(=^・^=)mm。。。

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

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

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

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

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

Pythonのリスト・辞書を昇順、降順に並び替えて、sort及びsortedの処理時間を計測[Alexandros]の曲の長さ順に表示

この記事を読むことによって、Pythonでリストを昇順、降順に並べ替えるsortと、新たにリストを定義して並べ替えるsortedの書き方について違いについて学べます。
また、両者の処理時間を比較することで、timeモジュールをインポートした書き方、処理時間の計算の仕方を学べます。

具体例として、好きなバンドの曲の長さの入ったリストを用います。
カラオケのオハコで、ドロスこと[Alexandros]の中でも特に私がよく歌う曲(現在コロナ禍の為、カラオケは自粛中)をリストにして、sortによる昇順、降順、sortedについてコードを書いて実行していきます。

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

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

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

今回使用する曲のリストです。

4:08 ワタリドリ 
3:15 FamousDay
4:27 RunAway
4:46 SNOW SOUND

これをこの様なリストを作ってみました。

DROS=[‘4:27 RunAway’,’4:08 ワタリドリ’,’3:15 FamousDay’,’4:46 SNOWSOUND’]

単純なコードを書いて、このまま出力してみます。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

では、出力結果です。


では、このリストを昇順にします。
カラオケの残り時間があまり無い時には短い曲から歌うことに使えそうですね。

昇順にするにはこの様に書きます。

DROS.sort()

ここまでのコードです。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

辞書を昇順にした実行結果です。

では、降順の出力は、この様に書きます。

DROS.sort(reverse=True)

reverseはデフォルトでは、Falseになっています。
これをTrueにすることによって、リストを降順にしています。

ここまでのコードです。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

リストを降順にした出力結果です。

これで、この記事を終わりにしても良いのですが、このリスト時間と曲があるので、一層のこと辞書にした方が良いのでは、と思われますよね。
そこで、辞書に作り替えてみます。

この様な辞書を作りました。

dict_DROS={‘4:27′:’RunAway’,’4:08′:’ ワタリドリ’,’3:15′:’FamousDay’,’4:46′:’SNOWSOUND’}

これまでのコードと出力結果です。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

#辞書を定義
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}
#辞書をそのまま出力する処理
print('【辞書】を【そのまま】出力-->>>>>')
print(dict_DROS)

辞書をそのまま出力した結果です。

では、同様に辞書を昇順にしてみます。

この書き方はエラーになる
dict_DROS.sort()

このエラー分をざっくりとした日本語に訳すと、「辞書ではsortは使えないよ!!」
という意味です。

つまり、sortはリストでは使えるけれど、辞書では使えないんですよね。

そこで、sortedを使って、items()を加えます。キーと値の両方をタプルとして出力するのに、items()も使って、この様にコードを書き直します。

new_dict_DROS=sorted(dict_DROS.items())

簡単に書くと、並び替えた辞書を新しい辞書に代入して、その新しい辞書を出力しています。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

#辞書を定義
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

#辞書をそのまま出力する処理
print('【辞書】を【そのまま】出力-->>>>>')
print(dict_DROS)

#辞書を昇順にする処理
new_dict_DROS=sorted(dict_DROS.items())
print('【辞書を昇順】に出力-->>>>>')
print(new_dict_DROS)

辞書を昇順にする処理の結果です。


今度は辞書を降順にしてみます。この様にコードを追記します。
こちらもreverseをTrueにします。

new_dict_DROS=sorted(dict_DROS.items(),reverse=True)

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

#辞書を定義
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

#辞書をそのまま出力する処理
print('【辞書】を【そのまま】出力-->>>>>')
print(dict_DROS)

#辞書を昇順にする処理
new_dict_DROS=sorted(dict_DROS.items())
print('【辞書を昇順】に出力-->>>>>')
print(new_dict_DROS)

#辞書を降順にする処理
new_dict_DROS=sorted(dict_DROS.items(),reverse=True)
print('【辞書を降順】に出力-->>>>>')
print(new_dict_DROS)

辞書を降順にする出力結果です。

sortedはリストでも辞書でも使えるんなら、sortっていらなくね?
って思いましたので、なぜsortが存在するのか処理時間の観点から見てみます。

一旦分かりやすくする為に、リストの定義と昇順のコードのみを掲載します。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)


このコードに追記して、sortを使った場合とsortedを使った場合の処理時間の違いを求めます。

timeモジュールをインポートして、sortの処理の直前にこの様に書くと処理開始前の時刻が求められます。

startTime1=time.time()

このコードで処理開始前の時刻が求められます。
この時刻とは、1970年1月1日0時0分0秒からの経過秒数です。

その為、処理の直後にはにendTime1を同様に記述して、下記の様にstartTime1とendTime1の差を求めることによって、処理にかかる時間を求めることが出来ます。

Time1=endTime1-startTime1


sortedの場合は、startTime2とendTime2の差を同様にしてを求めます。
また、どっちの方がどれだけ時間が短かったのかをIF文での分岐で比較を使って求めたので、ちょっとコードが長くなりました。

#時間を計測する為、にtimeモジュールをインポート
import time

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#【sort】を使って昇順にするのにかかる時間を求める
#処理の開始
startTime1=time.time()

#【昇順】にする処理
DROS.sort()

#処理の終了
endTime1=time.time()

#【sort】の処理時間
Time1=endTime1-startTime1

#処理時間の出力
print('【sort】を使ってリストを昇順にした時の処理時間')
print(Time1)



#【sorted】を使って昇順にするのにかかる時間を求める
#処理の開始
startTime2=time.time()

#【昇順】にする処理
newList=sorted(DROS)

#処理の終了
endTime2=time.time()

#【sorted】の処理時間
Time2=endTime2-startTime2

#処理時間の出力
print('【sorted】を使ってリストを昇順にした時の処理時間')
print(Time2)

#【sort】と【sorted】の処理時間でどちらの方が時間がかかるか比較する
#sortの方が早い場合
if Time1<Time2:
    print('【sort】の方が'+str(Time2-Time1)+'処理が早い\n')
#sortedの方が早い場合
else:
    print('【sorted】の方が'+str(Time1-Time2)+'処理が早い\n')


では、測定結果です。

これだけ見ると、sortの方が処理速度的にお得に思えます。
しかし、何回かやっていると時間が変わるので、その画面も表示します。

【sorted】の方が早いこともある。
こうなると、リストの並べ替えでsortedではなく、sortを使うメリットは処理速度以外に何かあるのか考えてみました。

リストをループで表示してみます。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#ループでそのまま改行表示
print('リストをループで【そのまま】表示')
for music in DROS:
    print(music)

これを【sort】と【sorted】でループ表示してみます。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#ループでそのまま改行表示
print('リストをループで【そのまま】表示')
for music in DROS:
    print(music)

print()

#sortを使ってループで表示
print('リストをループで【sort】で表示')
DROS.sort()
for music in DROS:
    print(music)

print()

#sortedを使ってループで表示
print('リストをループで【sorted】で表示')
DROS=sorted(DROS)
for music in DROS:
    print(music)

なので、結局、リストの場合sortを使うメリットというものがこの記事の実験からは明確にはなりませんでした。

まとめるとsortとsortedの違いはsortはリストのみ、sortedはリストだけではなく辞書も使えます。
sortとsortedの処理時間を検証したところ、若干sortの方が私の環境では早いようです。

ドロスこと[Alexandros]の車のCMソング「風になって」が話題ですね。
私もこの曲大好きで、コロナが終息したらカラオケに行って歌いたいです。

当分は自粛、自粛、自粛ですが。

ベストアルバム『Where’s My History?』も発売されますね。
楽しみです。
iTunesで買おうかな(=^・^=)mm。。。

では、そのまま出力、ループで出力、時間の昇順に出力、時間の降順に出力でプログラミングして見ます。

最後までお読みいただき、ありがとうございます。

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

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

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

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

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

Python辞書をループで3Bの恋人を表示

この記事を読むと、Pythonの辞書のキー及び値とは何か、また辞書自体の表示と、ループを使ってキーと値の表示をすることが可能になります。

辞書の例として、ライン漫画で人気でドラマ化された「3Bの恋人」の職業をキーに、キャラクターを値にしています。

辞書は{“キー”:”値”,”キー”:”値”・・・}の構造になっていて、3Bの恋人を例にすると、{“トリマー”:”はる”,”バンドマン”:”ユウ”}などになっています。

では、この記事本編で詳細を見ていきます。

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

Python自作サンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者試験へ
自己紹介

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

おはこんばんにちは!
うにゃうにゃエンジニアの猫です(=^・^=)

話題のドラマ、「3Bの恋人」の3Bとは、主演の馬場ふみかさんのBでは無く、
バンドマン、美容師、バーテンダーの職業に付くBです。

その3Bに主人公のはると4B目の舞台役者を加えて、5人の職業と名前を辞書を使ってループで取り出して見ます。
まず、print関数でシンプルに辞書自体を表示させてみます。

コードはこちらです。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print(character)

ちょっと見辛いですが・・・実行結果です。

では、この辞書をループを使って出力してみます。

コードに下記を追加します。
キーとなるのはjobは職業で、値となるのはhumanとして、forループで(job,human)とすると、「トリマー,はる」から、「舞台役者,マコト」までの全てのメンバーを取り出せます。

辞書.items():

を使って、キーであるjobと、値であるhumanを取り出します。

#辞書をループで出力
for (job,human) in character.items():
    print(job,human)

実行結果です。

まぁ、これでも辞書のキーと値が表示されていますけれど、もう少し日本語の体裁を整えたいと思います。

下記のように日本語を整えて表示します。

print(job+”の、”+human+”さんです。”)

ここまでのコードです。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print(character)

#改行
print()

#辞書をループで出力
for (job,human) in character.items():
    print(job+"の、"+human+"さんです。")

#改行
print()

実行結果です。

もう少し見やすくすると・・・
コードをこの様に書き換えます。

print(“【”+job+”】の、【”+human+”】さんです。”)

これで、実行してみます。

ここまでのコードです。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print(character)

#改行
print()

#辞書をループで出力
for (job,human) in character.items():
    print("【"+job+"】の、【"+human+"】さんです。")

#改行
print()

これで実行してみます。

改行のprint()、もう少しスッキリさせたいですよね。
なので、もうちょっと改変します。

#辞書自体を出力
print('\n'+str(character)+'\n')

この様にstrと’\n’で改行を表示させました。

では、最終的なプログラムを表示します。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print('\n'+str(character)+'\n')


#辞書をループで出力
for (job,human) in character.items():
    print("【"+job+"】の、【"+human+"】さんです。")

最後までお読みいただきありがとうございました。

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

Python自作サンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者試験へ
自己紹介

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

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

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

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

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

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

Pythonで辞書を使ってコードブルーの職業別に出力

この記事を読むと、Pythonの辞書の基本的な作り方、キーと値の指定の仕方、次のデータの追加方法、辞書から「キーを指定」して「値を取り出す方法」が学べます。
また、Pythonでの標準入力の書き方の復習も可能です。

この記事で作成する辞書の具体例として、医療系ドラマ「コード・ブルー ドクターヘリ緊急救命 3rd season」のキャラクターを用います。(山Pこと元NEWSの山下智久さん主演のドラマです。)

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

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

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

おはこんばんにちは!
うにゃうにゃエンジニアの猫です(=^・^=)
辞書は、キーと値で構成されているので、「{(波かっこ)」で括って、下記のように記述します。

character_dic={‘ドクター’:’藍沢耕作’}

で、この場合は【キー】が「ドクター」で、【値】が「藍沢耕作」です。
キーと値は「:」で区切っています。

この辞書にあと1人だけ(私の推しキャラ!)を追加してみます。

character_dic={‘ドクター’:’藍沢耕作’,’ナース’:’雪村双葉’}

辞書は、「,」を区切ることによって次のデータが入ります。
同様にして、他のキャラクターも追加して、辞書character_dicは、この様になりました。

character_dic={‘ドクター’:’藍沢耕作’,’フェロー’:’名取楓馬’,’ナース’:’雪村双葉’,’患者’:’緒方さん(板前の患者)’,’その他’:'(=^・^=)mm。。。’}

この辞書を単純に出力するコードと、その実行結果です。

#コードブルーのキャラクターの辞書。
#職業をキー、名前を値
character_dic={'ドクター':'藍沢耕作','フェロー':'名取楓馬','ナース':'雪村双葉','患者':'緒方さん(板前の患者)','その他':'(=^・^=)mm。。。'}

print(character_dic)

では、標準入力と単純なIF文を使って、少しアレンジをしていきたいと思います。

標準入力で、「d」と入力するとキー「ドクター」が指定されて値の「藍沢耕作」が出力されます。(ifの条件が真の時に該当)

「f」と入力するとキーに「フェロー(研修医)」が指定されて値の「名取楓馬」を出力されます。(elifの条件が「f」の時に該当)

「n」と入力するとキーに「ナース」が指定されて値の「雪村双葉」が出力されます。
(elifの条件が「n」の時に該当)

「p」と入力するとキーに「患者」が指定されて「緒方さん(板前の患者)」が出力されます。pは患者(patient)のpです。
(elifの条件が「p」の時に該当)

また、それ以外のテキトーな入力をすると、キーに「その他」が指定され、猫マークの「(=^・^=)mm。。。」が出力されます。(elseに該当)

ここまでのコートを、かいつまんで解説すると、標準入力の直前に、

print(‘【d】ドクター、【f】フェロー、【n】ナース,【p】患者 【記号】を入力>>>’,end=”)

と、書いています。
最後のend=”は、改行せずにこのメッセージの直後に【d】や【f】を入力できる様にしています。

標準入力は

job=input()

で、ここで【d】とか【f】などの文字を変数jobに格納します。

その後はIF文で分岐させています。

if job=='d':
    index='ドクター'
elif job=='f':
    index='フェロー'
elif job=='n':
    index='ナース'
elif job=='p':
    index='患者'
else:
    index='その他'

その後にjobに入力された【d】や【f】がこのIF文による分岐で、indexに「ドクター」や「フェロー」などの辞書のキーが代入されます。

その代入されたindexを辞書のキーとして、キャラクター名を下記のprint文で出力しています。

print(character_dic[index])

では、これまでのコードと実行結果です。

#コードブルーのキャラクターの辞書。
#職業をキー、名前を値
character_dic={'ドクター':'藍沢耕作','フェロー':'名取楓馬','ナース':'雪村双葉','患者':'緒方さん(板前の患者)','その他':'(=^・^=)mm。。。'}

#標準入力でキーを指定
print('【d】ドクター、【f】フェロー、【n】ナース,【p】患者 【記号】を入力>>>',end='')
job=input()

#IF文による分岐で辞書のキーを指定して、変数indexに代入する
if job=='d':
    index='ドクター'
elif job=='f':
    index='フェロー'
elif job=='n':
    index='ナース'
elif job=='p':
    index='患者'
else:
    index='その他'

#辞書のキーにindexが入って、該当する値が出力される
print(character_dic[index])

ここから実行結果を見ていきます。頭の中でIFによる分岐をイメージして書きました。

標準入力で【d】を指定した場合。

標準入力で【f】を指定した場合。

標準入力で【n】を指定した場合。

標準入力で【p】を指定した場合。

標準入力でなんかテキトーなキー(ここでは【y】)を指定した場合。

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

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

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

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

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

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

Pythonのリストで八王子占いと浦和占い

この記事を読むことで、Pythonのリストの基礎である、添字(インデックス)を指定して表示する方法と、添字の乱数を組み合わせてランダムに配列の中身を表示させるテクニックをゲーム感覚で楽しく且つスピーディーに学ぶことが可能になります。

Pythonの基礎を勉強する中でも特に、八王子駅や浦和駅など、北八王子、南浦和といった待ち合わせをする時に紛らわしいな、と感じた方は興味を持って下さる内容になっているのかもしれません。

なので、前半は八王子の方、後半は埼玉県の浦和、大宮、鴻巣の方や「埼玉あるある」に共感して頂けたら嬉しいです(=^x^=)

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

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

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

この記事を書いている今日は2021(令和3)年3月1日です。
この時期は入学などで1人暮らしを始める方もいらっしゃいますね。

そこで、学生の街で有名な東京の西の方にある八王子という街を題材とした「八王子占い」を作ってみました。
Pythonでリスト(配列)の添え字を乱数にして、「あなたは何八王子か」という
診断のゲームです。

八王子には、

・西八王子駅
・北八王子駅
・京王八王子駅
・(ふつうの)八王子駅

があります。

プログラムはコチラになります。

手順
1:乱数を使うためにランダムモジュールをインポートする
2:駅名のリストを用意する
3:リストの要素数(長さを調べる)
4:乱数を発生させて変数ekiに代入する
5:結果を「あなたは【北八王子駅】です」と言った形式で表示させる。

では、各手順ごとに見ていきます。

手順1:乱数を使うためにランダムモジュールをインポートする

import random

手順2:駅名のリストを用意する

station=[‘西’,’北’,’京王’,’(ふつうの)’]

手順3:リストの要素数(長さを調べる)

num=len(station)

このリストの場合は、要素数の長さが4になります。

手順5:乱数を発生させて変数ekiに代入する

eki=random.randrange(num)

ここで、randrangeを使うことで0から要素数未満の乱数を発生させます。
リストのインデックスは0からリストの長さ-1までになります。


手順5:結果を「あなたは【北八王子駅】です」と言った形式で表示させる。

print(‘あなたは、【’+station[eki]+’八王子駅】です!\n’)

最後に改行して見やすく出来るように、「\n」を入れています。
バックスラッシュNと読みます。
バックスラッシュは、Macでは「option」キーと「¥」を同時に押します。

ここまでのコードをまとめます。

#乱数を発生させるのに使うランダムモジュールをインポートする
import random

#駅名のリストを用意する
station=['西','北','京王','(ふつうの)']

#リストの要素数を調べる
num=len(station)

#乱数を発生させて、変数ekiに代入する
eki=random.randrange(num)

#診断結果の表示
print('あなたは、【'+station[eki]+'八王子駅】です!\n')

実行結果です。
このようにランダムに何八王子なのか出力されます。

ちなみに私は大学時代に京王八王子駅から徒歩2分の物件に住んでいました。

このコードでは、ちょっと物足りないな…と言う方は、馴染みのある場所とか、好きなキャラクターとかでアレンジして見ても良いかもしれません。

例えば埼玉県の浦和では、浦和駅の他に「浦和」が着く駅名は、

・北浦和駅
・東浦和駅
・西浦和駅
・南浦和駅
・武蔵浦和駅
・中浦和駅
・浦和美園駅

と、こんなにあるんですね。
八王子の倍の数ですし、どの浦和駅なのか迷っちゃいますね(涙)

そこで、上記の八王子のプログラムを改良して、浦和駅バージョンを作りたいと思います。

変更したのは2点です。
まず、リストです。
長さが8のリストでstation[0],station[1]・・・,station[7]までになります。

station=[‘東’,’西’,’南’,’北’,’武蔵’,’美園’,’中’,’(ふつうの)’]

ここで、気をつけなければ行けないのは、例えば北浦和、南浦和でしたら、浦和駅の前に北とか南が付きますが、「浦和美園駅」の場合は途中に付きますので、乱数が5(くどいようですが、リストの添字は0から始まるので、リストの「6番目」である浦和美園駅は、添字は「5」になります。)の時ように分岐を設ける必要が出てきます。

if eki!=5:#浦和美園ではない場合
print(‘あなたは、【’+station[eki]+’浦和駅】です!\n’)

else:#浦和美園駅の場合
print(‘あなたは、【浦和’+station[eki]+’駅】です!\n’)

と、乱数がeki=5で浦和美園駅になった場合は、それに対応する分岐を作りました。

!=で、ノットイコール、すなわち最初の分岐は浦和美園駅のekiの添字が5ではない場合です。下のelseで、ekiが5、すなわち浦和美園駅の場合の出力に対応しています。

実行結果です。

では、浦和駅バージョンの全コードを公開します。

#乱数を発生させるのに使うランダムモジュールをインポートする
import random

#駅名のリストを用意する
station=['東','西','南','北','武蔵','美園','中','(ふつうの)']

#リストの要素数を調べる
num=len(station)

#乱数を発生させて、変数ekiに代入する
eki=random.randrange(num)

#診断結果の表示
if eki!=5:#浦和美園ではない場合
    print('あなたは、【'+station[eki]+'浦和駅】です!\n')
else:#浦和美園駅の場合
    print('あなたは、【浦和'+station[eki]+'駅】です!\n')    

それでは、良い物件が見つかって、楽しいキャンパスライフをお過ごしになることを願っております。

ちょっと話が脱線してしまいますが、「埼玉県民あるある」を調べたら、浦和と大宮が仲が悪いとか、千葉県をライバル視しているとかありました。
ゼリーフライって美味しそうですね。

あと、少し気になったのですが、「鴻巣」というと「免許」の話に限定されるようですね。それで、例えば埼玉県の越谷の方も、飯能の方も、みんな免許更新に鴻巣に集まるのでしょうか・・・。
それは大変だな。
だからという訳ではありませんが、免許はゴールドで行きましょう!!

ご精読ありがとうござました!!

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

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

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

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

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

PythonのリストとループとIF文でコードブルー3rdシーズンのメンバーを表示して見た

この記事を読むことで、Pythonのリストを単純にループを使って取り出す方法とenumerate関数の使い方が学べます。
具体例として使うのは、医療系ドラマの「コードブルードクターヘリ(山Pこと、元NEWSの山下智久さん主演のドラマ)」のキャラクターを用いています。

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

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

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

3rdシーズンの新メンバー4人の名前をcharacterというリストにこの様に格納しました。

character=[‘名取颯馬’,’灰谷俊平’,’横峯あかり’,’雪村双葉’]

リストの添え字は「0(ゼロ)」から始まります。
このリストの場合、末尾は3です。

このリストの添字0の名取先生、添字1の灰谷先生、添字2の横峯先生までが「フェロー(研修医)」で、添字3の雪村双葉さんが「ナース」です。

そこで、jobという変数を用意して、添え字が3の雪村さんの時のみ職業を「ナース」にして、それ以外でしたら「フェロー」と表示する様にプログラミングしました。
シンプルなIF文による分岐をしています。

#コードブルー3rdシーズンの新メンバーのリスト
character=['名取颯馬','灰谷俊平','横峯あかり','雪村双葉']

#ループを使ってリストを取り出す。
#iが3の雪村さんの時のみ職業jobを「ナース」にする
for i in range(len(character)):
    if i==3:
        job='ナース'
    else:
        job='フェロー'
    print(job,character[i])        

実行結果です。

ループのところでlen関数でリストの長さを求めて、その分繰り返すように指定していますけれど、この部分に直接配列自体を書くことも可能です。
ただ、そうすると、リストの添字i=3の時のキャラクターの職業を「ナース」にするといった、添字による分岐が出来なくて困りますよね。

そこで登場するのがenumerate関数です。
enumerateを使うことによって、リストの添字i=0,1,2,3とリストの中身のキャラクターを同時に扱えます。

コードを改変します。

#コードブルー3rdシーズンの新メンバーのリスト
character=['名取颯馬','灰谷俊平','横峯あかり','雪村双葉']

#ループを使ってリストを取り出す。
#iが3の雪村さんの時のみ職業jobを「ナース」にする
for i,member in enumerate(character):
    if i==3:
        job='ナース'
    else:
        job='フェロー'
    print(job,member)        

このように書き換えられます。

更に表示する実行結果をスムーズな日本語に改変することも可能です。

#コードブルー3rdシーズンの新メンバーのリスト
character=['名取颯馬','灰谷俊平','横峯あかり','雪村双葉']

#ループを使ってリストを取り出す。
#iが3の雪村さんの時のみ職業jobを「ナース」にする
for i,member in enumerate(character):
    if i==3:
        job='ナース'
    else:
        job='フェロー'
    print('添字'+str(i)+'の職業は'+job+'で名前は'+member+'です。')        

str(i)としているのは、数値を文字と一緒にprint文内に表記する為です。
では、実行結果です。

まぁ、これでも良いのですが、もっとこのドラマの雰囲気に合うようにprint文を書き換えてみます。

#コードブルー3rdシーズンの新メンバーのリスト
character=['名取颯馬','灰谷俊平','横峯あかり','雪村双葉']

#ループを使ってリストを取り出す。
#iが3の雪村さんの時のみ職業jobを「ナース」にする
for i,member in enumerate(character):
    if i==3:
        job='ナース'
    else:
        job='フェロー'
    print('file.'+str(i)+member+'...'+job)        

実行結果です。

この様に、enumerate関数を使うと自在に表記できるので便利です。
ループ、リストとセットで私も頑張って覚えます。

この記事を書いている2021年11月現在では、医療系ドラマというと、「私、失敗しないので。」が決めゼリフの米倉涼子さん演じるドクターX外科医大門未知子が有名ですね。

今回リストの具体例として扱ったコードブルーという医療ドラマは、その数年前に流行りました。
私はちょっと生意気な新人ナース雪村双葉役の馬場ふみかさんのファンです(=^・^=)


雪村さんの可愛げないキャラを、カワイイ馬場さんが演じている所にキュンキュンして見ていました。
雪村さんって、可愛げないのにカワイイんです。
日本語変だけれど、彼女の可愛げない所が、たまらなくカワイイんですよ。

とても「リベンジガール」の「仲手川万里子」と同じ方とは思えない演技の幅の広さも馬場ふみかさんの魅力の1つだと思います。

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

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

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

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

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

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

Pythonで今日のラッキーカラーを乱数で作ってみた

この記事では、乱数を使って今日のラッキーカラーを求める自作のサンプルプログラムを紹介します。
0から70までの乱数を発生させ、その乱数を7で割った余りで色分けします。

乱数は、1行目のimport randomによって使えるようになり、random.randintで発生させたい数字を入力します。

7で割った時の余りによって、ラッキーカラーが変わります。

import random

num=random.randint(0,70)

if num%7==0:
    color='赤'

elif num%7==1:
    color='黄'

elif num%7==2:
    color='青'

elif num%7==3:
    color='ピンク'

elif num%7==4:
    color='グレー'

elif num%7==5:
    color='黒'

else:
    color='紫'

print("乱数が「"+str(num)+"」で割った余りが「"+str(num%7)+"」だにゃん!!") 

print("今日のあなたのラッキーカラーは、【"+color+"】です!(=^ェ^=)")

では、実行して見ます。

何度か実行して見た所、ランダムに数が変わって色が求められました。

これでも動くのですが、分岐が多いので、IFよりもmatchを使った文の方が分かりやすいです。(他の言語でいう、switch文)

余りはremと言う変数を使っています。

import random

num=random.randint(0,70)
rem=num%7

print(rem)

match rem:
    case 0:
    color='赤'

    case 1:
    color='黄'

    case 2:
    color='青'

    case 3:
    color='ピンク'

    case 4:
    color='グレー'

    case 5:
    color='黒'

    case _:
    color='紫'

print("乱数が「"+str(num)+"」で割った余りが「"+str(rem)+"」だにゃん!!") 

print("今日のあなたのラッキーカラーは、【"+color+"】です!(=^ェ^=)")

まだまだ、もっと頑張んないとな。

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

Python自作サンプル集へ
これからプログラミングを始める方へ
メインメニューに戻る
息抜きに、写真で癒し(=^・^=)

Python自作サンプル集

「プログラミングをもっとカジュアルに!!」をコンセプトに、流行や趣味、ギャグなどを取り入れて、Pythonのサンプルプログラムを自作してみました。

■ Python自作サンプル集 ■


□ 環境構築 □

Python環境構築(Windows)とHello World

Python環境構築(Mac)とHello World及び計算


□ IF分岐 □

奇数で推しとキッス

乱数randintで星座占い

乱数で今日のラッキーカラーを作ってみた。

IF文で関東人度・関西人度診断チェック


□ ループ □

ループの基礎と2ずつ増加、ドラマの名台詞を表示「同情すんなら金をくれ!」

ループと論理和orで、「3時のヒロイン」登場!!


ループの内包表記を基本的な書き方と対応付けて解説「宜保愛子じゃない!!」


□ リスト □

乱数randrangeでラーメン激戦区のメニューリスト


コードブルー3rdシーズンのメンバーを表示して見た

リストで八王子占いと浦和占い(埼玉あるあるについても)

うるう年ループ(IF文、Forループ、リストに追加の復習)

リストの内包表記で演算とV6の名曲のソート


□ 辞書 □

辞書でコードブルーのキャストを職業別に取り出し

辞書をループで「3Bの恋人」を表示

リスト・辞書を並び替えてsort、sortedの処理時間を計測して[Alexandros]の曲の長さ順に表示

辞書で日本史のお勉強

辞書で世界史のお勉強

辞書で化学(周期表・元素記号)のお勉強




□ 二次元リストのドット絵 □

二次元リスト ドット絵でインベーダーを書いてみた。

二次元リスト ドット絵で市松模様を書いてみた

二次元リストでまじ卍(Python改行も)


□ 関数 □

【Python関数初心者向け!!】関数を「カレーライス」で覚えて平面図形の面積を求めてみる(長方形、三角形、台形)とプログラミング英語

【Python関数初心者向けの関数ドリル!!】関数を立体図形で使いこなす!ピラミッドを作れ!(立方体・直方体・円柱・三角錐・四角錐・円錐)

円周率で関数の呼び出し、累乗・円の面積・球の体積・円周

半端ならK.O.踊っ(割り算ゲーム)

正義のヒーロー「変なおじさん!」(関数デフォルト値)

ビーファーストBE:FIRSTの平均年齢を辞書、リスト、関数を使って求めてみた

ドラマDIVE!!で水泳飛び込みの採点と麻木コーチのコメント

ドラマDIVE!!で麻木コーチが3人の中から代表を選ぶ


□ 関数 □

【Pythonクラス爆速理解!!】昭和ギャグから学ぶクラスとインスタンス「月曜日はウンジャラゲ♪」

【Pythonクラス爆速理解!!】「BE:FIRST」のメンバーのプロフィール(名前・出身地・身長)でクラスを学習

【Pythonクラス爆速理解!!】「NiziU」のメンバーカラーでクラスを学習

クラスを使ってアロマオイルの値段を計算する

【Pythonクラスの継承とメソッドのオーバーライド】HiHiJet井上瑞稀さん美 少年 浮所飛貴さんのバク宙

■ 使用教材の紹介 ■

最初に紹介する本は、Python向けの本では無く、基本情報技術者試験の勉強をしていた時に使っていたアルゴリズムの対策本です。
なぜこの本を最初に紹介したのかというと、私が合格した令和2年度(令和3年1月)の試験の合格率が6割近くと高すぎる、この試験の価値がどうだ、こうだ、といった書き込みを見かけたからです。
そう思うのなら、上位資格や別の資格、または徹底して復習をしようと思いました。
Pythonは初めてですが、アルゴリズムは勉強してきたので、基本のアルゴリズムをPythonで作ってみようと思いました。(著作権があるので自分の勉強のみで、コードは公開しません。)
ちなみにFEの選択言語はアセンブラでした。

関連記事:アセンブラ自作サンプルプログラミング集

次に、独習Pythonを紹介します。

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

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

こちらの詳細は Python学習進捗状況(私のロードマップ) をご覧ください。

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

プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。

メインメニューへ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Python環境設定からHello Worldまで(Windows)

Python自作サンプル集へ
これからプログラミングを始める方へ
メインメニューに戻る
息抜きに、写真で癒し(=^・^=)

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

Pythonの環境設定、調べてみたら色々ありましたが、すぐにコードを書きながら勉強を始めたかったので、
最も簡単そうな方法で環境構築しました。

用意した物は
・Python
・Visual Studio Code
・MS-DOS

です。

PythonはPythonの開発環境を用意しよう(Windows)を参考にインストールしました。
注意点として、「必ずチェックしてください」と書かれてあるところは、必ずチェックしてください。

Visual Studio Codeはこちらからダウンロードしました。

MS-DOSは入っています。

では、Visual Studio CodeにPythonで実際に書いて作ってみます。

まず最初にCドライブの下にフォルダを作ります。
フォルダ名は、「pylesson」にしました。

Visual Studio Code で[Ctrl]+[N]を押して、新しく作ります。
[Ctrl]+[Shift]+[s]で、保存をします。
先ほど作ったフォルダ「pylesson」の中に「hello.py」という名前で保存します。

このように書いていきます。

<1>

コードはこちらになります。

print(“初めてのPython”)
print(“Hello World!!”)
print(“こんな感じで大丈夫かな・・・”)

MS-DOSで、「cd c:/pylesson」とコマンドを打つと、今プログラミングした「hello.py」が入っている「pylesson」に移動します。

「hello.py」が入っているかどうか確認します。
「dir」とコマンドを打ちます。

ありました。

それでは早速実行します。

「python hello.py」とコマンドを打ちます。

無事、実行できました。

Python自作サンプル集へ
これからプログラミングを始める方へ
メインメニューに戻る
息抜きに、写真で癒し(=^・^=)