🐍
Python文法復習 ~コンソールで自己紹介カードの作成~
作成するプログラム内容
・自分の以下の情報を入力して自己紹介カードを作成しテキスト形式で出力できるようにする
-
入力情報
- 名前
- 生年月日
- 趣味
- 一言
-
自己紹介カードでは以下の情報を表示させる
- 名前
- 生年月日と年齢(生年月日から算出する。年齢を算出する関数は自作する)
- 趣味
- 一言メッセージ
復習内容
- データの表示と入力
- データの変換
- 文字列の結合
- リスト型と辞書型の使い方
- 関数の使い方
- 日時データの扱い方
- その他
表示イメージ
※緑の文字が入力した文字です
ソースコード(全体)
"""
自己紹介カードの作成
"""
import datetime
# 生年月日から年齢を計算する関数
def get_age(year, month, day):
dt_now = datetime.datetime.now()
birthday = datetime.datetime(
year=year,
month=month,
day=day
)
# 経過日数を計算
elapsed_days = dt_now - birthday
# 計算した経過日数を365で割ることで何年経過しているか算出する
age = int((elapsed_days.days) / 365)
return str(age)
# 取得情報を入れる辞書
my_info = {
"name": None,
"birthday_year": None,
"birthday_month": None,
"birthday_day": None,
"age": None,
"hobby": None,
"message": None
}
# 表示するメッセージリスト
msg_list = [
"自己紹介カードを作成します。\n以下の情報を入力してください。",
"名前を入力してください",
"生年月日を入力してください",
]
print(msg_list[0])
# 名前の入力
print("Q1")
my_info["name"] = input(msg_list[1] + "\n")
# 生年月日の入力
print("Q2")
print(msg_list[2])
# 生年月日の入力
# 入力された値はint型に変換して辞書に保存
# intに変換できないものが入力されたときはエラーとなる
try:
my_info["birthday_year"] = int(input("年(西暦)は?" + "\n"))
my_info["birthday_month"] = int(input("月は?" + "\n"))
my_info["birthday_day"] = int(input("日は?" + "\n"))
# 年齢の計算
my_info["age"] = get_age(year=my_info["birthday_year"],
month=my_info["birthday_month"],
day=my_info["birthday_day"])
except ValueError as e:
print(e)
# 趣味と一言メッセージの入力
my_info['hobby'] = input("趣味を入力してください\n")
my_info['message'] = input("一言メッセージを入力してください\n")
# カードの作成
card = f"名前:{my_info['name']}\n生年月日:{my_info['birthday_year']}/{my_info['birthday_month']}/{my_info['birthday_day']}({my_info['age']} 歳)\n趣味:{str(my_info['hobby'])}\n一言メッセージ:{str(my_info['message'])}"
# 自己紹介カードの表示
print("===========================================================")
print(card)
print("===========================================================")
ソースコード解説
データの表示と入力
- 入力
- input(表示させる文字列)
- 表示
- print(表示させる文字列)
print("Q1")
my_info["name"] = input(msg_list[1] + "\n")
データの変換
- input関数で入力したデータはstr型のデータになるので計算をしたい場合にはデータの型変換が必要になる
- 構文
- 変換したいデータ型(変換するデータ)
# 入力したデータをint型に変換する
int(input("年(西暦)は?" + "\n"))
- 主なデータ型
- 文字:str
- 整数:int
- 真偽値:bool
- 小数:float
文字列の結合
- ことなる2つのstr型のデータを【+】演算子でデータをつなげることができる
moji="文字列!"
card = "文字列~" + "文字列~" +"文字列~" + moji
リスト型
- リストの作成
- カッコ[ ]で囲ってデータはカンマで区切る
- データの取り出し
- データを取り出す際はインデックスを指定して取り出す
- 一番最初の要素のインデックスは0です
# リストの作成
msg_list = [
"自己紹介カードを作成します。\n以下の情報を入力してください。",
"名前を入力してください",
"生年月日を入力してください",
]
# リストからデータの取り出し
print(msg_list[2])
辞書型
- 辞書型のデータはキーとバリューで構成されたデータ型
- 1つのキーに対して1つのバリューを持つ。キーの名称の重複は不可!
- 構文
- 辞書名={"キー1":"バリュー1","キー2":"バリュー2"・・・・}
# 取得情報を入れる辞書
my_info = {
"name": "",
"birthday_year": None,
"birthday_month": None,
"birthday_day": None,
"age": None,
"hobby": None,
"message": None
}
- 辞書データの操作
- データの挿入・・・キーを指定してバリューに保存する
- データの取得・・・キーを指定してバリューを取り出す
# データを挿入する
my_info["birthday_year"] = int(input("年(西暦)は?" + "\n"))
# データを取り出す
card = f"名前:{my_info['name']}\n生年月日:{my_info['birthday_year']}/{my_info['birthday_month']}/{my_info['birthday_day']}({my_info['age']} 歳)\n趣味:{str(my_info['hobby'])}\n一言メッセージ:{str(my_info['message'])}"
関数の使い方
- 関数とは、処理を一つにまとめて繰り返し使えるようにしたもの。処理した結果を関数の外で使いたい場合はreturnで値を返す
=構文====================
def 関数名(引数):
処理・・・
return 戻り値
==========================
# 生年月日から年齢を計算する関数の作成
def get_age(year, month, day):
dt_now = datetime.datetime.now()
birthday = datetime.datetime(
year=year,
month=month,
day=day
)
elapsed_days = dt_now - birthday
age = int((elapsed_days.days) / 365)
return str(age)
# 年齢の計算(関数を使う)
my_info["age"] = get_age(year=my_info["birthday_year"],
month=my_info["birthday_month"],
day=my_info["birthday_day"])
※datetimeモジュールはあとから解説
日時データの扱い方
- 日時データはdatetimeモジュールを使うのでdatetimeをインポートする
- 年月日、時間の取得
- 年 .year
- 月 .month
- 日 .day
- 時 .hour
- 分 .minutes
- 秒 .second
import datetime
# 現在日時を取得
dt_now = datetime.datetime.now()
# datetimeオブジェクトの作成
birthday = datetime.datetime(
year=year,
month=month,
day=day
)
・詳細は公式ドキュメント参照
その他
- エラー処理
エラー処理
プログラムを実際に動かすと予期せぬエラーが発生することがあります。その時に英文のエラー文が出たら見栄え悪いのでエラー文が出ないようにエラーが起きた時の処理を別でプログラミングすることができます。
tryの中でエラーが発生した場合、except内の処理を行います。exceptの続きに具体的なエラーを指定することでエラーごとで例外処理を分けることができます。
今回のプログラムでは「ValueError」=「値に関するエラー」が発生した場合に例外処理を行うようにしています。
=====構文=======================
try:
処理・・・
except:
エラーが出た時の処理・・・
・詳細は公式ドキュメント参照
ソースコード
Discussion