🐍

Python文法復習 ~コンソールで自己紹介カードの作成~

2024/12/11に公開

作成するプログラム内容

・自分の以下の情報を入力して自己紹介カードを作成しテキスト形式で出力できるようにする

  • 入力情報

    • 名前
    • 生年月日
    • 趣味
    • 一言
  • 自己紹介カードでは以下の情報を表示させる

    • 名前
    • 生年月日と年齢(生年月日から算出する。年齢を算出する関数は自作する)
    • 趣味
    • 一言メッセージ

復習内容

  • データの表示と入力
  • データの変換
  • 文字列の結合
  • リスト型と辞書型の使い方
  • 関数の使い方
  • 日時データの扱い方
  • その他

表示イメージ

※緑の文字が入力した文字です

ソースコード(全体)

"""
自己紹介カードの作成

"""
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
)

・詳細は公式ドキュメント参照
https://docs.python.org/ja/3/library/datetime.html

その他

  • エラー処理

エラー処理

プログラムを実際に動かすと予期せぬエラーが発生することがあります。その時に英文のエラー文が出たら見栄え悪いのでエラー文が出ないようにエラーが起きた時の処理を別でプログラミングすることができます。
tryの中でエラーが発生した場合、except内の処理を行います。exceptの続きに具体的なエラーを指定することでエラーごとで例外処理を分けることができます。
今回のプログラムでは「ValueError」=「値に関するエラー」が発生した場合に例外処理を行うようにしています。

=====構文=======================
try:
    処理・・・
except:
    エラーが出た時の処理・・・

・詳細は公式ドキュメント参照
https://docs.python.org/ja/3/tutorial/errors.html

ソースコード

https://github.com/Eakoooooon/Master-Lesson18.git

Discussion