Pythonの辞書をループを用いて「サザエさん」のキャラを取り出す

この記事を読むことで、

・Pythonの辞書の「キー」及び「値」とは何か

・辞書自体をそのまま表示

・「辞書.items()」を使って、辞書をループを使って取り出す

の学習が出来ます。

辞書の例として、国民的アニメの「サザエさん」のキャラクターの「職業をキー」に、「キャラクターを値」にしています。

辞書は{“キー”:”値” , “キー”:”値” ,・・・}の構造になっていて、サザエさんキャラを例にすると、{“大黒柱”:”磯野波平” , “主婦”:”フグ田サザエ”}などになります。

サザエさんキャラの中から、こちらの5名を用意しました。
辞書の名前は「chara_dic」です。

#サザエさんのキャラクターの辞書
#職業や特徴を「キー」、名前を「値」
chara_dic={'大黒柱':'磯野波平','主婦':'フグ田サザエ','小学生':'磯野カツオ','幼児':'フグ田タラオ','ペット':'タマ'}

まずは、ループで辞書のキーと値を取り出す前に、print関数でシンプルに辞書自体を表示させてみます。

コードはこちらです。

#サザエさんのキャラクターの辞書
#職業や特徴を「キー」、名前を「値」
chara_dic={'大黒柱':'磯野波平','主婦':'フグ田サザエ','小学生':'磯野カツオ','幼児':'フグ田タラオ','ペット':'タマ'}

#辞書自体を「そのまま」出力
print(chara_dic)

辞書を「そのまま」取り出した実行結果です。

無事に出力されましたが、少し見辛いですよね。

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


コードに下記を追加します。

キーになるのはkey:職業や特徴で、となるのはvalue:キャラクター名として、
forループで(key,value)を指定とすると、「大黒柱,磯野波平」から、「ペット,タマ」までの全てのメンバーを取り出せます。

#書き方は、「 辞書.items(): 」
chara_dic.items()

を使って、キーであるkeyと、であるvalueを取り出します。
ここまでのコードと実行結果です。

#サザエさんのキャラクターの辞書
#職業や特徴を「キー」、名前を「値」
chara_dic={'大黒柱':'磯野波平','主婦':'フグ田サザエ','小学生':'磯野カツオ','幼児':'フグ田タラオ','ペット':'タマ'}

#辞書.items()を使ってループで出力
for (key,value) in chara_dic.items():
  print(key,value)

これでも辞書の「キー」と「値」が表示されて、先程よりかは幾分見やすくなりましたが、もう少し日本語の体裁を整えたいと思います。


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

print(key+"の、"+value+"さんです。")

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

#サザエさんのキャラクターの辞書
#職業や特徴を「キー」、名前を「値」
chara_dic={'大黒柱':'磯野波平','主婦':'フグ田サザエ','小学生':'磯野カツオ','幼児':'フグ田タラオ','ペット':'タマ'}

#辞書.items()を使ってループで出力
for (key,value) in chara_dic.items():
  print(key+"の、"+value+"さんです。")



もう少し「キー」と「値」を見やすくしたいので、コードをこの様に書き換えます。

print("【"+key+"】の、【"+value+"】さんです。")

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

#サザエさんのキャラクターの辞書
#職業や特徴を「キー」、名前を「値」
chara_dic={'大黒柱':'磯野波平','主婦':'フグ田サザエ','小学生':'磯野カツオ','幼児':'フグ田タラオ','ペット':'タマ'}

#辞書.items()を使ってループで出力
for (key,value) in chara_dic.items():
  print("【"+key+"】の、【"+value+"】さんです。")

お疲れ様でした。ブレイクタイムPhotoは、

千葉県の房総半島、外房の御宿の海です。

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

PythonのリストをループとIF文、enumerate関数を使ってサザエさんキャラを取り出してみた。

この記事を読むことで、

Pythonのリストを単純にループを使って取り出す方法

・enumerate関数を使って取り出す方法

・IF文の復習

strで数値と文字列をprint文で表示する方法

が可能になります

具体例として使うのは、国民的アニメのサザエさんです。
その中から4人の名前をcharacterというリストにこの様に格納しました。

chara=['波平','サザエ','カツオ','タマ']

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

このリストの添字0の波平さん、添字1のサザエさん、添字2のカツオまでが「人間」で、添字3のタマが「猫ちゃん」です。

そこで、typeという変数を用意して、添え字が3のタマの場合のみtypeを「猫ちゃん」に、それ以外は「人間」と表示する様にプログラミングしました。
シンプルなIF文による分岐をしています。

#サザエさんのキャラクターのリスト
chara=['波平','サザエ','カツオ','タマ']

#ループを使ってリストを取り出す
#i=3のタマのtypeを「猫ちゃん」にする
for i in range(len(chara)):
  if i==3:
    type='猫ちゃん'
  else:
    type='人間'
  print(chara[i]+':'+type)

実行結果です。

このコードにenumerate関数を使うと、添字と値を同時に表示させることが可能になります。

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

#サザエさんのキャラクターのリスト
chara=['波平','サザエ','カツオ','タマ']

#ループを使ってリストを取り出す
#i=3のタマのtypeを「猫ちゃん」にする
for i,member in enumerate(chara):
  if i==3:
    type='猫ちゃん'
  else:
    type='人間'
  print(i,member+':'+type)

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

実行結果です。

更に最後のprint文を変更して、実行結果に表示する日本語を、より伝わりやすく改変することも可能です。

str(i)を使うことによって、数値を文字と一緒にprint文内に表記しております。

#サザエさんのキャラクターのリスト
chara=['波平','サザエ','カツオ','タマ']

#ループを使ってリストを取り出す
#i=3のタマのtypeを「猫ちゃん」にする
for i,member in enumerate(chara):
  if i==3:
    type='猫ちゃん'
  else:
    type='人間'
  print('家族No.'+str(i)+' '+member+'さんは「'+type+'」です。')

実行結果です。

この様に、enumerate関数を使うと表記の自由度が増します。
ループ、リストとセットで復習にもなりました。

お疲れ様でした。ブレイクタイムPhotoは、

千葉県房総半島外房、御宿の海です。
ここの海は透明度が高いことが魅力の一つです。

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【人狼ゲームでPythonの総復習】Pythonの入門〜関数までの基礎文法の総復習をゲームを通して出來るサンプルコード

この記事では、簡単な人狼ゲームを作りながら、Pythonの入門〜関数までの基礎文法の総復習が出来るサンプルコードを掲載しております。

この記事で学習出来ることは、

・「=」代入と「==」比較演算子の違い

・無料で使えるオンラインのエディター紹介

・乱数とIF文で勝敗バトル

・Whileループと乱数で勝敗バトル

・↑記事に関数を導入

・Forループの基本的な使い方

・人狼役職の配列表示

・配列とForループ

・プログラミング学習コンテンツの紹介

についての概要が掴めます。
Python学習中の皆さま方、どうか宜しくお願いします


プログラミングの学習を始めた頃、「=」と「==」の違いで少し迷った時期がありました。

これについては、実際に手を動かしてコードを書いてみると、その疑問が氷解出来ました。

まず、「=」の代入ですが、変数roleに役職「市民」を代入して、print文で表示させます。

ご存知の方には恐縮ですが、コメントは「#」を付けます。
また、英語でroleは「役目」を表す単語です。

プログラミングには英語が良く出て来ますが、英検3級に落ちた私でも分からなかったら即調べるを繰り返して基礎文法は身に付きましたので、どうかご安心なさって下さい。

#変数roleに「市民」を代入
role='市民'

#役職を表示する
print(role)

実行結果はこちらです。

roleという変数に、役職「市民」が代入されて出力されました。
この後、roleに「裏切り者」を代入して出力します。

role='市民'

#別の役職、「裏切り者」を代入
role='裏切り者'

print(role)

実行結果です。

このように、代入では入れる値によっては上書きされるというイメージを持って頂けたらと思います。

一方で、「==」は、等しいかどうかの判定を行います。
boolで真偽(True か False)を返します。

role='人狼'

#boolで等しい時はTrue、そうでなければFalse
print(bool(role=='市民'))

「人狼」と「市民」は等しくないので、この様な実行結果になります。

IF文では、もしも「まっさらな市民」だとしたら自分は退場して、騎士などの役職持ちのメンバーに頑張ってもらいたい時は、例えばこの様に記述します。

role='市民'

#役職が市民だったら退場する
if role=='市民':
    print('自分は退場して、騎士や霊媒師などに頑張ってもらう')

実行結果です。

ここでもし、「==」を「=」にしてしまうと、エラーが出てしまって、正しく実行されません。

7行目の所でエラーが出ています。

「=」の代入と、「==」の比較演算子の違いは、実際に書いてみるのが一番理解できました。

とはいえ、「書いてみて」と言われても、プログラミングって環境構築に結構な時間や手間が掛かりますよね。

そこで、すぐに試してコードを書いて実行できる、オンライン上で無料の開発環境IDEを次の項目で紹介します。


結論ですが、paiza.ioがオススメです。

「コード作成を試してみる(無料)」→ 「Python3」 からすぐに学習開始出来ます。

無料のオンラインエディタ(IDE)を調べたら10個ぐらい出てきて、どれを使おうか迷いましたが、

といった点から、paiza.ioをオススメします。

ここでは、標準入力を使ってみます。
paiza.ioの下のタブの「入力」を選択して、自分のやりたい役職を入力します。

この状態で下記のコードを実行します。
変数roleに標準入力で入れた役職が入り、それを出力します。

#標準入力で、やりたい役職を入力する
role=input()

#その役職を表示する
print('私が1番やりたい役職は【'+role+'】です。')

標準入力についてはここまでにして、次からはランダムな数字である乱数を使って、ゲーム的な要素をプログラミングに取り入れてみます。


ここから、乱数を使って、「市民チーム」と「人狼チーム」の勝敗を出力するといった、ゲーム的要素を入れたコードを書いて行きます。

1から10までの乱数を作って、5以上だったら人狼チームの勝ち、そうで無ければ市民チームの勝ちとします。

乱数は、import random で使える様になり、1から10のランダムな整数は random.randint(1,10)で生成します。
その乱数を変数numに代入します。

勝者を入れる変数は、winnerを使います。

#乱数を使える様にする
import random

#1から10までの乱数を作る
num=random.randint(1,10)

#5以上だったら人狼チームの勝利
if num>=5:
    winner='人狼'
else:
    winner='市民'

#勝敗結果を出力
print('勝者は【'+winner+'】チームです!!')

実行結果です。

何回か実行してみると、

実行結果が変わりました。
このままでも、どっちが勝ったのか分かるのですが、乱数の数値が何だったのか知りたいので、numも表示させてみます。

#乱数を使える様にする
import random

#1から10までの乱数を作る
num=random.randint(1,10)

#5以上だったら人狼チームの勝利
if num>=5:
    winner='人狼'
else:
    winner='市民'

#勝敗結果を出力
print('勝者は【'+winner+'】チームです!!')
print(num)

あとは、1行で表示されるようにしたいのと、numもprint文の中に一緒に入れたいのですが、数値型の変数を文字列型と一緒に使う場合には、str(num)と書きます。

#乱数を使える様にする
import random

#1から10までの乱数を作る
num=random.randint(1,10)

#5以上だったら人狼チームの勝利
if num>=5:
    winner='人狼'
else:
    winner='市民'

#勝敗結果と乱数を一緒に出力
print('numが「'+str(num)+'」より、勝者は【'+winner+'】チームです!!')

実行結果です。


ループを使ってちょっとRPGっぽく、市民チームと人狼チームのHPを指定して、HPが0になったらループを抜けて負けにしてみます。

Whileループの継続条件は、両方のチームのHPが0以上の場合です。

攻撃されるとHPが減って、攻撃によってどれぐらいHPが減るのかを乱数attackで指定します。

flagが0だったら人狼チームの攻撃、1だったら市民チームの攻撃にします。

改行は「\n」を使います。

ちょっと複雑だな・・・と思われた方は、次の次のForループの所まで読み飛ばして頂いても大丈夫です♪

#乱数を使える様にする
import random


#市民チームと人狼チームのHP初期値を10にする
shimin_HP=10
jinro_HP=10

#whileループでバトル!!
while shimin_HP>0 and jinro_HP>0:

    #相手チームに与えるダメージは1から5までの乱数にする
    attack=random.randint(1,5)

    #0だったら人狼チームの攻撃、1だったら市民チームの攻撃にする
    flag=random.randint(0,1)

    if flag==0:
        print('人狼チームが市民チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された市民チームのHPがマイナスされる
        shimin_HP-=attack
    else:
        print('市民チームが人狼チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された人狼チームのHPがマイナスされる
        jinro_HP-=attack
    print('市民チームHP残:'+str(shimin_HP)+'\n人狼チームHP残:'+str(jinro_HP))
    print('----------')
    
#勝敗結果
if shimin_HP>jinro_HP:
    winner='市民'
else:
    winner='人狼'

print('勝者は【'+winner+'】チーム!!')  

実行結果は長いので省略させて頂きますm(_ _)m

コード自体が長くなってきて、メンテナンスの意味も込めて、次の項目ではバトルの部分と勝敗結果をdefを使って関数にして、関数をループ中やprint文の中から呼び出してみるようにコードを書き換えてみます。


バトルの部分を関数battleにして、whileループで呼び出し、勝敗結果をprint文の中で呼び出すコードに書き換えてみました。

#乱数を使える様にする
import random


#市民チームと人狼チームのHP初期値を10にする
shimin_HP=10
jinro_HP=10


#defで関数battleを定義する
def battle(shimin_HP,jinro_HP):
    
    #相手チームに与えるダメージは1から5までの乱数にする
    attack=random.randint(1,5)

    #0だったら人狼チームの攻撃、1だったら市民チームの攻撃にする
    flag=random.randint(0,1)

    if flag==0:
        print('人狼チームが市民チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された市民チームのHPがマイナスされる
        shimin_HP-=attack
    else:
        print('市民チームが人狼チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された人狼チームのHPがマイナスされる
        jinro_HP-=attack
    print('市民チームHP残:'+str(shimin_HP)+'\n人狼チームHP残:'+str(jinro_HP))
    print('----------')
    
    return shimin_HP,jinro_HP


while shimin_HP>0 and jinro_HP>0:
    #関数battleを呼び出している
    shimin_HP,jinro_HP=battle(shimin_HP,jinro_HP)    
    
#defで関数winを定義している
def win():
    if shimin_HP>jinro_HP:
        winner='市民'
    else:
        winner='人狼'
    return winner

#print文の中で関数winを呼び出している
print('勝者は【'+win()+'】チーム!!')


上記のWhileループの他にForループがあって、配列と一緒に使うのに便利です。
人狼ゲームの役職の配列を作ってその中身を取り出すのにForループを使って行きます。
その前に、Forループの基本的な使い方を確認します。

・0から4まで1ずつ加算

#0から4まで1ずつ加算
for i in range(5):
    print(i)

実行結果です。

もっと短いコードで書ける、内包表記を使うとこの様になります。

#0から4まで1ずつ加算
for i in range(5):
    print(i)

#内包表記
[print(i) for i in range(5)]

内包表記の実行結果も上のループと同じになります。

・0から9まで2ずつ加算

#0から9まで2ずつ加算
for i in range(0,10,2):
    print(i)

#内包表記
[print(i) for i in range(0,10,2)]

実行結果(同じなので、片方だけのスクショです。)

・5から1まで1ずつ減算

#5から1まで1ずつ減算
for i in range(5,0,-1):
    print(i)

#内包表記
[print(i) for i in range(5,0,-1)]

以上が、Forループの基本的な使い方です。


配列って、なんか難しそうだ・・・と思われた方は、配列とは団地みたいなものをイメージして下さい。

団地の0号室に「市民」が住んでいて、1号室に「霊媒師」が住んでいて・・・そんなイメージです。

普通の団地と異なるのは、0号室から始まることです。

#配列を定義
array=['市民','霊媒師','占い師','騎士','裏切り者','人狼']

#配列を出力
print(array)

出力結果です。

配列は0から始まるので、例えば「占い師」を表示させたい場合は、array[2]になります。

#配列を定義
array=['市民','霊媒師','占い師','騎士','裏切り者','人狼']

#配列を出力
print(array[2])

次の項目では、先ほどのループと配列を合わせた、プログラミングでは使用頻度の高いコードを掲載します。


ループを使って、配列の中身を取り出します。
通常の表記と、内包表記を併記します。

#配列を定義
array=['市民','霊媒師','占い師','騎士','裏切り者','人狼']

#Forループで配列の出力
for role in array:
 print(role)
 
#内包表記
[print(role) for role in array]

実行結果です。

この記事ではここまでで、Pythonの入門〜関数までの総復習が出来たと思います。

もっと詳しく勉強したい方は、下記の学習コンテンツがオススメです。
いきなり本を買っても良いのですが、出来れば動画学習コンテンツで多少知識を入れてからの方が、本当に必要なお買い物が出来ると思います。

本も紹介させて頂きます。


初めてのプログラミング学習では、やはり講師の説明を聞きながら動画を見て、それを自分のPCで動かして試してみる・・・という方法がハードルが低いので、オススメの学習コンテンツを2つ紹介します。

どっちが良いのか迷われた方は、両方の無料レッスンを受けてみて、自分に合いそうな方を取り入れて下さい。

ドットインストール
paizaラーニング

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

長々と書いてしまいましたが、本当に読んで下さって有難うございます。
大変、お疲れ様でした。


ブレイクタイムPhotoは・・・

遊歩道の桜

地元の遊歩道の桜並木です。


Python自作サンプルに戻る
写真クリエイターとしての活動

自己紹介

【Python辞書で化学(周期表・元素記号)のお勉強】辞書を使って元素記号をキーに元素名を値にする

この記事を読むことでPythonの辞書について化学の元素を例に、

・辞書をループで取り出す

・標準入力を用いて指定した元素名を表示する

ことが可能になります。

まず、この様な辞書を用意します。(コピペ出来ます)

elements={'H':'水素',
'He':'ヘリウム',
'Li':'リチウム',
'Be':'ベリリウム',
'B':'ホウ素',
'C':'炭素',
'N':'窒素',
'O':'酸素',
'F':'フッ素',
'Ne':'ネオン',
'Na':'ナトリウム',
'Mg':'マグネシウム',
'Al':'アルミニウム',
'Si':'ケイ素',
'P':'リン',
'S':'硫黄',
'Cl':'塩素',
}

まずはこの辞書をループで取り出しますので、下記のコードを追記致します。

for element,name in elements.items():
  print(element+'…「'+name+'」')


今度は標準入力で元素記号を入力すると、その元素の日本語名がリストで表示される様に致します。追加したコードです。

print('元素名を入力>>>',end='')
element=input()
print(elements[element]+'\n')

上記のコードを加えて、ループで取り出した一覧から、好きな元素記号を標準入力で入力します。

実行結果です。
この例では、「Mg」でマグネシウムを入力しています。

これまでのコードです。

elements={'H':'水素',
'He':'ヘリウム',
'Li':'リチウム',
'Be':'ベリリウム',
'B':'ホウ素',
'C':'炭素',
'N':'窒素',
'O':'酸素',
'F':'フッ素',
'Ne':'ネオン',
'Na':'ナトリウム',
'Mg':'マグネシウム',
'Al':'アルミニウム',
'Si':'ケイ素',
'P':'リン',
'S':'硫黄',
'Cl':'塩素',
}

print()

for element,name in elements.items():
  print(element+'…「'+name+'」')

print()

print('元素名を入力>>>',end='')
element=input()
print(elements[element]+'\n')

空行のprint文を入れて、体裁を整えています。

お疲れ様でした。ブレイクタイムPhotoは、

払沢の滝、滝壺です。(東京都檜原村)

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【Python辞書で歴史(世界史)のお勉強】辞書を使って年号をキーに出来事を値にする

この記事を読むことで、

・Pythonの辞書をループで出力

・辞書のキーに該当する値を取り出す

が可能になります。
例として、世界史の年表を用います。

まず、この様な世界史の年表の辞書を用意(コピペ出来ます)します。

worldHistory={962:'神聖ローマ帝国が成立する',
1066:'ノルマン征服 (ノルマン朝が成立する)',
1202:'第4回十字軍がコンスタンティノープルを占領しラテン帝国を建国する',
1215:'ジョン王がマグナカルタを承認する',
1453:'ビザンツ帝国滅亡(百年戦争終結)',
1479:'スペイン王国が成立する',
1492:'コロンブスがアメリカ大陸を発見する',
1660:'イギリスで王政復古がおこる',
1685:'フランスでナントの勅令が廃止される',
1688:'イギリスで名誉革命がおこる',
1789:'フランス革命がおこる (フランス人権宣言)',
1804:'ナポレオンが皇帝に即位',
1848:'フランスで二月革命がおこる',
1902:'日英同盟の締結',
1905:'ポーツマス条約が結ばれる',}

では、これをループで取り出してみます。

yearをキーにして、その年に起きたことをeventにして、辞書historyにitems()を付けて辞書をループで取り出しています。

for year,event in worldHistory.items():
  print(str(year)+'年に「'+event+'」')

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

worldHistory={962:'神聖ローマ帝国が成立する',
1066:'ノルマン征服 (ノルマン朝が成立する)',
1202:'第4回十字軍がコンスタンティノープルを占領しラテン帝国を建国する',
1215:'ジョン王がマグナカルタを承認する',
1453:'ビザンツ帝国滅亡(百年戦争終結)',
1479:'スペイン王国が成立する',
1492:'コロンブスがアメリカ大陸を発見する',
1660:'イギリスで王政復古がおこる',
1685:'フランスでナントの勅令が廃止される',
1688:'イギリスで名誉革命がおこる',
1789:'フランス革命がおこる (フランス人権宣言)',
1804:'ナポレオンが皇帝に即位',
1848:'フランスで二月革命がおこる',
1902:'日英同盟の締結',
1905:'ポーツマス条約が結ばれる',}

print()

for year,event in worldHistory.items():
  print(str(year)+'年に「'+event+'」')

print()

次は標準入力で年号を入力すると出来事がリストで表示される様に致します。
追加するコードです。

print('年号を入力>>>',end='')
year=int(input())
print(worldHistory[year]+'\n')

上記のコードを加えて、年表一覧から好きな年号を標準入力で入力します。
ここまでのコードと実行結果です。

worldHistory={962:'神聖ローマ帝国が成立する',
1066:'ノルマン征服 (ノルマン朝が成立する)',
1202:'第4回十字軍がコンスタンティノープルを占領しラテン帝国を建国する',
1215:'ジョン王がマグナカルタを承認する',
1453:'ビザンツ帝国滅亡(百年戦争終結)',
1479:'スペイン王国が成立する',
1492:'コロンブスがアメリカ大陸を発見する',
1660:'イギリスで王政復古がおこる',
1685:'フランスでナントの勅令が廃止される',
1688:'イギリスで名誉革命がおこる',
1789:'フランス革命がおこる (フランス人権宣言)',
1804:'ナポレオンが皇帝に即位',
1848:'フランスで二月革命がおこる',
1902:'日英同盟の締結',
1905:'ポーツマス条約が結ばれる',}

print()

for year,event in worldHistory.items():
  print(str(year)+'年に「'+event+'」')

print()

print('年号を入力>>>',end="")
year=int(input())
print(worldHistory[year]+'\n')

この例では「1688」と入力して、1688年の「イギリスで名誉革命がおこる」と出力させました。

print文の空行を入れて体裁を整えています。

参考にした歴史のウェブサイトはこちらになります。

【世界史】年号語呂合わせ一覧!センター試験対策の暗記に最適

お疲れ様でした。ブレイクタイムPhotoは、

多摩川土手です。

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【Python辞書で歴史(日本史)のお勉強】辞書を使って年号をキーに出来事を値にする

この記事を読むことで、

・Pythonの辞書をループで取り出せる

・キーに該当する値を取り出せる

ことが可能になります。
例として、日本史の年号をキーに、その年の出来事を値にします。

こちらが用意する辞書です。

#日本史の年号をキーに出来事を値にした辞書を作成
japaneseHistory={607:'小野妹子ら遣隋使派遣',
720:'日本書紀の編纂',
1086:'白河上皇の院政始まる',
1221:'承久の乱',
1338:'室町幕府の成立',
1588:'刀狩り',
1603:'江戸幕府の成立',
1709:'新井白石の政治',
1837:'大塩平八郎の乱',
1853:'ペリー来航',
1877:'西南戦争',
1902:'日英同盟'}

参考にした歴史のウェブサイトはこちらになります。

では、この辞書をループで取り出してみます。
コードと実行結果です。

#日本史の年号をキーに出来事を値にした辞書を作成
japaneseHistory={607:'小野妹子ら遣隋使派遣',
720:'日本書紀の編纂',
1086:'白河上皇の院政始まる',
1221:'承久の乱',
1338:'室町幕府の成立',
1588:'刀狩り',
1603:'江戸幕府の成立',
1709:'新井白石の政治',
1837:'大塩平八郎の乱',
1853:'ペリー来航',
1877:'西南戦争',
1902:'日英同盟'}

print()

for year,event in japaneseHistory.items():
  print(str(year)+'年には「'+event+'」がありました。')

print()


今度は標準入力で年号を入力すると出来事がリストで表示される様に致します。

print('年号を入力して下さい>>>',end="")
year=int(input())
print('その年には【'+japaneseHistory[year]+'】がありました')

辞書の一覧にある年から好きな年号を標準入力で入力して、出来事を表示するコードと
実行結果です。ループの表示を参考に、好きな年号を入力します。

#日本史の年号をキーに出来事を値にした辞書を作成
japaneseHistory={607:'小野妹子ら遣隋使派遣',
720:'日本書紀の編纂',
1086:'白河上皇の院政始まる',
1221:'承久の乱',
1338:'室町幕府の成立',
1588:'刀狩り',
1603:'江戸幕府の成立',
1709:'新井白石の政治',
1837:'大塩平八郎の乱',
1853:'ペリー来航',
1877:'西南戦争',
1902:'日英同盟'}

print()

for year,event in japaneseHistory.items():
  print(str(year)+'年には「'+event+'」がありました。')

print()

print('好きな年号を半角数字で入力して下さい>>>',end="")
year=int(input())
print('その年には【'+japaneseHistory[year]+'】がありました。')

print()

この例では1853と入力すると、「ペリー来航」と出力されました。


お疲れ様でした。ブレイクタイムPhotoは、

マクセルアクアパーク品川(水族館)の「ノコギリエイ」です。

怖かわいいです(笑)

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【Pythonループ】ループとIF文の中の論理演算子「or」で、「3時のヒロイン」さん登場!!

この記事は、Pythonのループで、「3時のヒロイン」さん(郷ひろみさんと一緒に「にしたんクリニック」のCMに出演している、吉本興業所属の芸人さん)を例に、

・ループの中でIF文と論理演算子or(または)を使う

・3時 or 15時の時にメッセージを表示する


・strで数字を文字列と一緒に表示する

・「\n」で改行する

とったコードを掲載して、解説しております。

3時のヒロインさんのプロフィールです。

このCMですね。
「♪ た〜ん、たん、にしたん、たんたんた〜ん」
タンバリンを持って踊っている所が可愛いです。


そこで、Pythonでループを使って、3時と15時の時に3時のヒロインさんに登場して頂きます。

このループでは、range(24)で0時から23時まで表示させます。
ループ内の変数はhourを用います。

論理演算子のorを使って、hourが3時 or 15時の時にprint文に3時のヒロインさんを登場させるといった、シンプルなループになっています。

#3時と15時に「3時のヒロイン」さん登場!!
for hour in range(24):
  if hour==3 or hour==15:
    print("<<<【"+str(hour)+"時】のヒロインさん登場>>>\n")
  else:
    print(str(hour)+"時")

実行結果です。


お疲れ様でした。ブレイクタイムPhotoは、

スカイツリーと河津桜のコラボです。
このライティングは日向坂46の楽曲、『JOYFUL LOVE』の虹色のカラーです。
3時のヒロインさんは、日向坂46四期生の冠歌番組「ひなパレ」のMCを務めました。

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【Pythonクラスの継承とメソッドのオーバーライド】ゲゲゲの鬼太郎キャラの例

この記事を読むことで、

・クラスの継承をゲゲゲの鬼太郎のキャラクターと一般人の例

・親クラスを一般人、子クラスを鬼太郎たち妖怪

・メソッドのオーバーライドのコード

・一般的なループと内包表記を使ったループの復習

の概要が掴めます。

親(スーパー)クラスPeopleを継承して、小クラスGegegeを作ります。
どちらにもactionというメソッドがあり、親クラスPeopleの方のactionでは、「通勤電車に乗った」という動きを、小クラスGegegeのactionでは「妖術を使った」という動きにしました。

ループも使うので、一般的なループの書き方と【内包表記】を使ったループの書き方も掲載します。

「親クラスPeople」に登場する一般人は、「ヤマダ」さん、「サトウ」さん、「ヒガ」さん、「シマブクロ」さんです。
各々の一般人を引数にして、それぞれ「yamada,satou,higa,shimabukuro」というオブジェクトを作成しています。

また、「子クラスGegege」では「鬼太郎」、「ネコ娘」、「砂かけばばあ」、「ぬりかべ」のキャラを引数にして、それぞれ「kitarou,nekomusume,sunakakebabaa,nurikabe」というオブジェクトを作成しています。

親クラス「People」のコンストラクタでは、「selfとname」を引数にしています。actionメソッドでは「self.nameさんは電車に乗った。」という動きをprint文で作ります。

class People:
    def __init__(self,name):
        self.name=name

    def action(self):
        print('  【'+self.name+'さん】は「電車」に乗った。')

小クラス「Gegege」では、「self.nameさんは妖術を使って戦った!!」という動きを作ります。

#子クラス「Gegege」で鬼太郎たちが戦う動きを掲載
class Gegege(People):
    def action(self):
        print('【'+self.name+'】は【妖術】を使って戦った!!')

このように、同じ名前のメソッドを、小クラスでは親クラスとは別の動きにすることを、メソッドのオーバーライドと言います。

また、子クラスのGegegeでは、コンストラクタはありませんが、自動的に親クラスのコンストラクタが呼ばれます。

一般人と鬼太郎たちのオブジェクトを生成するコードです。

#一般人と鬼太郎たち妖怪のオブジェクトを作成
yamada=People('ヤマダ')
satou=People('サトウ')
higa=People('ヒガ')
shimabukuro=People('シマブクロ')
kitarou=Gegege('鬼太郎')
nekomusume=Gegege('ネコ娘')
sunakakebabaa=Gegege('砂かけばばあ')
nurikabe=Gegege('ぬりかべ')

上記のオブジェクトをarrayという配列に入れます。

#オブジェクトを配列に格納
array=[yamada,satou,higa,shimabukuro,kitarou,nekomusume,sunakakebabaa,nurikabe]

この配列をループで取り出して、メソッドactionを呼ぶことによって、下記の実行結果を得られます。
ループのコードと、実行結果です。

#ループで各オブジェクとを動かしてみる
for man in array:
    man.action()

また、上記のループを内包表記で書いた場合のコードです。

#上記ループの内包表記
[man.action() for man in array]    

このように、内包表記では1行で書き現すことが出来ました。

ここまでのコードを全て掲載します。

#親クラス「People」にはコンストラクタと一般人の動きをactionメソッド
class People:
    def __init__(self,name):
        self.name=name

    def action(self):
        print('【'+self.name+'さん】は「電車」に乗った。')


#子クラス「Gegege」で鬼太郎たちが戦う動きを掲載
class Gegege(People):
    def action(self):
        print('【'+self.name+'】は【妖術】を使って戦った!!')


#一般人と鬼太郎たち妖怪のオブジェクトを作成
yamada=People('ヤマダ')
satou=People('サトウ')
higa=People('ヒガ')
shimabukuro=People('シマブクロ')
kitarou=Gegege('鬼太郎')
nekomusume=Gegege('ネコ娘')
sunakakebabaa=Gegege('砂かけばばあ')
nurikabe=Gegege('ぬりかべ')


#オブジェクトを配列に格納
array=[yamada,satou,higa,shimabukuro,kitarou,nekomusume,sunakakebabaa,nurikabe]


#内包表記でループを1行に
[man.action() for man in array]

お疲れ様でした。ブレイクタイムPhotoは、

通勤通学で使う方もいらっしゃる、東京モノレールです。
羽田空港第二ターミナルまで行きます。

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【Pythonループと内包表記】「宜保愛子じゃない!!」でループの基礎と内包表記を対応付け

この記事を読むことで、

・ループの基本的なコードの書き方

・上記を内包表記ではどのように書くのかの対応付け

・標準入力の使い方

の理解出来ます。


特に内包表記は通常のループの表記と一つずつ対応付けて書きましたので、この記事を読に終わる頃には内包表記にある程度慣れてくると思います。

今回標準入力でキーボードから入力させる文字列は、ドラマ「不適切にもほどがある!」の中から選んだセリフ、「宜保愛子じゃない!!」です。

この記事の前編として、Pythonでループの基礎2つずつ増加と標準入力「同情すんなら金をくれ!」を掲載しました。

今回は、その記事の後編となります。

まずは基本的なループです。
0から4までの数を表示します。

for i in range(5):
  print(i)

このコードを内包表記で書くと、たったの1行で済みます。

[print(i) for i in range(5)]

実行結果です。

内包表記は、

[ 計算(表示)結果 いつものfor文 ]

という書式になります。
別の例として、この数列を2倍にすることも可能です。


<2倍の基本的な書き方>

for i in range(5):
  print(i*2)

<2倍の内包表記>

[print(i*2) for i in range(5)]

実行結果です。


では、30から-3ずつカウントダウンしていくコードです。

<基本的なコード>

for i in range(30,0,-3):
  print(i)

<内包表記>

[print(i) for i in range(30,0,-3)]

実行結果です。


それでは、いよいよ、ドラマ「不適切にも程がある(ふてほど)」「宜保愛子じゃない!!」を指定の回数だけ表示させる、基本のFor文のコードと、内包表記の解説に移ります。

標準入力でキーボードから「宜保愛子じゃない!!」を入力してループで指定の回数までを表示するコードです。

<基本的なループ>

#表示する回数
N=5

#名セリフを入力←標準入力
print("あなたの好きなセリフを入力して下さい--->>>",end="")
msg=input()

#基本的なループ
for i in range(N):
  print(str(i)+":"+msg)

<内包表記>

#表示する回数
N=5

#名セリフを入力←標準入力
print("あなたの好きなセリフを入力して下さい--->>>",end="")
msg=input()

#内包表記
[print(str(i)+":"+msg) for i in range(N)]

実行結果です。


お疲れ様でした。ブレイクタイムPhotoは、

いたばし花火大会2025です。

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【Pythonループ2つずつ増加・減少】ループで 家なき子「同情すんなら金をくれ!!!!」ドラマの名台詞を表示

この記事を読むことで、

・Python始めたばかりで、ループの書き方ってどうやるのか分からないんだけど・・・。

・Pythonのループで2ずつ増加(1個飛ばし)ってどうやるの?

・逆に減らすのは?

・好きな文字列をループで指定した回数分表示させたい

が理解出来、更に標準入力と組み合わせて学習出来ます。


まずは基本的なループです。
0から19までの数を表示します。

for i in range(20):
  print(i)

このようにrangeで指定する場合は、その数未満の数が対象になるので、0〜19までが表示の対象となります。実行結果です。


次に2つずつの増加のループに書き換えます。
rangeのカッコ内に

range(開始 , 終了(指定の数未満), 増加分)

と書きます。
以下が2つずつ増加するループのコードと実行結果です。

for i in range(0,20,2):
  print(i)


次に数を減らす場合は、

range(開始 , 終了(その数を含まない), 減らす分)

ここでは、30から1までを3ずつ減らすコードと実行結果を記載します。

for i in range(30,0,-3):
  print(i)

3つずつ減らされていることと、0は含まれていないことが確認できました。


では、今度は指定の数だけドラマの名台詞を表示させてみます。

好きな文字列表示に使う具体例は、ドラマの名台詞です。
「同情すんなら金をくれ!」
「僕は死にません!!」

の2つのセリフを使います。


平成の名ドラマ「家なき子」の安達祐実さんのセリフ、「同情すんなら金をくれ!」を、5回表示させます。
Nに表示回数の5、msgにセリフを入れてコードを書いて実行します。

#セリフを表示させる回数
N=5

#ドラマの名セリフ
msg="同情すんなら金をくれ!!"

for i in range(N):
  print(msg)

名セリフが5回出力されました。
あの頃の安達祐実さんの表情が蘇ります(涙)

それで、range(5)は5未満なのに、5回表示されるのは何故?
4回になるのでは・・・。と思われたアナタ、鋭いです!!

print文を下記の様に変更して、ループの変数「i」も同時に表示させてみます。
数値を文字列と一緒に表示する場合は、strを用います。
数字と文字列の間に「:」を「+」で連結しています。

print(str(i)+’:’+msg)

コードと実行結果です。

#セリフを表示させる回数
N=5

#ドラマの名セリフ
msg="同情すんなら金をくれ!!"

for i in range(N):
  print(str(i)+':'+msg)

セリフを変えるには、変数msgを変更します。

#セリフを表示させる回数
N=5

#ドラマの名セリフ ← ここを変更
msg="僕は死にません!!"

for i in range(N):
  print(str(i)+':'+msg)

武田鉄矢さんの金八先生とは全く異なるキャラで必死な愛を感じました。
ただ当時、どこかの中学生の男子が真似して車の運転手に怒られていたという話を噂程度に聞いたことがあります。


では、ドラマのセリフを標準入力を使って、都度変更させるコードにしてみます。

print('あなたが好きな名セリフを入力して下さい--->>',end='')

end=”で、改行しないで直後に入力できるようにしている。

標準入力はinput関数を使用して、msgに代入しています。

msg=input()

では、コードと実行結果です。

#表示する回数
N=5

#ドラマの名台詞←ここを標準入力に変更
print('あなたが好きな名セリフを入力して下さい--->>',end='')
msg=input()

for i in range(N):
    print(str(i)+':'+msg)

例えば、「不適切にもほどがある」の「宜保愛子じゃない!!」などを入力してみるのも面白いかも知れません。
宜保愛子さん、すっごく久しぶりに名前を聞きました。

(「愚か者」と「ギンギラギン」は、ブログで書いちゃっても良いのかな・・・?)

お若い方にとって、「宜保愛子って誰??」だと思われるかも知れませんので、簡単に書くと、「タレント、霊能力者、作家」です。

この記事の後半は、こちらで扱ったコードを中心に、基本のFor文コードと内包表記でのコードを対応付けていきます。
Pythonでループの基礎と内包表記を対応付けて解説「宜保愛子じゃない!!」

お疲れ様でした。ブレイクタイムPhotoは、

マクセルアクアパーク品川(水族館)の写真です。

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

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介