パソコン仕事5倍塾
35,000人を指導した東大卒・元日本IBM社内講師が直伝
MENU
沖津さんの投稿
(投稿ID: 5371)
from datetime import datetime dt_birth = datetime(2013, 10, 17, 0, 0, 0) # 誕生日 year_birth = dt_birth.year # 誕生した年 month_birth = dt_birth.month # 誕生した月 day_birth = dt_birth.day # 誕生した日 # 現在の日付時刻 dt_now = datetime.now() year_now = dt_now.year # 今日の年 month_now = dt_now.month # 今日の月 day_now = dt_now.day # 今日の日 sa_year = year_now - year_birth # 何年の差があるか # 今年、誕生日が来たかどうかを調べる if month_now < month_birth: nenrei = sa_year - 1 elif month_now == month_birth: nenrei = sa_year - 1 if day_now < day_birth: nenrei = sa_year - 1 else: nenrei = sa_year print(f"年齢は{nenrei}才です")
小川 慶一さんのコメント
(コメントID: 7742)
沖津さんのコメント
(コメントID: 7746)
(コメントID: 7757)
from datetime import date dt_birth = date(2013, 10, 17, ) # 誕生日 dt_today = date.today() years = dt_today.year - dt_birth.year this_year_date = dt_birth.replace(year=dt_today.year) if dt_today < this_year_date: years -= 1 print(years)
藤本 博子さんのコメント
(コメントID: 7761)
from datetime import datetime,timedelta from datetime import date ''' input関数で入力した誕生日 yyyy/m/dから、年齢の年と、月数を求める ''' def get_years_old(dt): """ :param dt(仮引数):input関数で入力した誕生日(yyyy/m/dを、spritメソッド(引数"/")で分割,数値型に変換した値を変数:elemに格納。 splitメソッドの戻り値を、datetimeオブジェクトの引数に渡す(int()で数値型に変換) today:今日の日付を取得 this_year:今年の年を取得 month:今日の月を取得 day:今日の日を取得 tmp_date:input関数で渡した誕生日の月と日の値を、本年度の日付で再設定して、誕生日が今日の日にちを超えたか確認する 年齢の算出 本年度、まだ誕生日を迎えてない場合は、本年度の年-誕生年-1 月齢の算出 ∟誕生日の日にちの値が、今日の日にちの値より大きい 日は跨いでない場合は、今日の月の値-誕生月に11ケ月足す ∟誕生日の日にちの値が、今日の日にちの値より小さい 日は跨いだ 今日の月の値-誕生月に12ケ月足す 年齢の算出 本年度、すでに誕生日を迎えていたら、本年度の年-誕生年 月齢の算出 ∟誕生日の日にちの値が、今日の日にちの値より大きい 日は跨いでない 1ケ月マイナス ∟誕生日の日にちの値が、今日の日にちの値より小さい 日は跨いだ 今日の月の値-誕生月 :return: 返り値は、年と月を渡す f"{years}年{tmp_month}ケ月" """ today = datetime.now() this_year = today.year month = dt.month day = dt.day tmp_date = datetime(this_year,month,day) if tmp_date >= today:#誕生日がきてない years = today.year - dt.year - 1 if tmp_date.day > today.day:#誕生日の日にちの値が、今日の日にちの値より大きい 日は跨いでない場合は、今日の月の値-誕生月に11ケ月足す tmp_month = today.month - dt.month + 11 else:#誕生日の日にちの値が、今日の日にちの値より小さい 日は跨いだ 今日の月の値-誕生月に12ケ月足す tmp_month = today.month - dt.month + 12 buf = f"{years}才{tmp_month}ケ月" else:#誕生日がきた tmp_date < today years = today.year - dt.year if tmp_date.day > today.day:#日の値 誕生日の日の値の方が今日の日の値り大きい 1月マイナス tmp_month = today.month - dt.month -1 else: tmp_month = today.month - dt.month #日の値 今日の日の値の方が誕生日の日の値より小さい buf = f"{years}才{tmp_month}ケ月" return buf birth_day_input = input("誕生日入力 (yy/m/d形式)") elem =birth_day_input.split("/") print(elem[0],elem[1],elem[2]) birth_day = datetime(int(elem[0]),int(elem[1]),int(elem[2])) ans = get_years_old(birth_day) print(f"年齢は、{ans}です")
(コメントID: 7762)
birth_day_input = input("誕生日入力 (yyyy/m/d形式)")
たかちゃんさんのコメント
(コメントID: 7775)
(コメントID: 7776)
(コメントID: 7777)
(コメントID: 7778)
from datetime import date dt_birth = date(2013, 10, 17, ) # 誕生日 dt_today = date.today() years = dt_today.year - dt_birth.year months = dt_today.month - dt_birth.month # 今年、誕生日が来たのか?調べる this_year_date = dt_birth.replace(year=dt_today.year) if dt_today < this_year_date: years -= 1 # 誕生日の日と今日の日を比べ、日をまたいでいるか調べる if dt_today.day < dt_birth.day: months -= 1 # 月の差がマイナスになったときの調整 if months < 0: months += 12 print(F"{years}年{months}ヶ月")
(コメントID: 7780)
田中 宏明さんのコメント
(コメントID: 7781)
(コメントID: 7788)
(コメントID: 7789)
(コメントID: 7793)
ゆみこさんのコメント
(コメントID: 8164)
(コメントID: 8166)
pip install pytest
from datetime import date zodiac_sign_days = { # 各星座の最終日だけを記載 "山羊座": {"month": 1, "day": 19}, "水瓶座": {"month": 2, "day": 18}, "魚座": {"month": 3, "day": 20, }, "牡羊座": {"month": 4, "day": 19, }, "牡牛座": {"month": 5, "day": 20, }, "双子座": {"month": 6, "day": 20, }, "蟹座": {"month": 7, "day": 22, }, "獅子座": {"month": 8, "day": 22, }, "乙女座": {"month": 9, "day": 22, }, "天秤座": {"month": 10, "day": 22, }, "蠍座": {"month": 11, "day": 21, }, "射手座": {"month": 12, "day": 21, }, } def get_first_month_day_of_zodiac_sign(month): """ 各星座の最終日を含む月から、その星座の最初の日を返す :return: {'month': 1, 'day': 20} といった形式の辞書 """ if month == 1: last_month = 12 else: last_month = month - 1 for k, v in zodiac_sign_days.items(): if v['month'] == last_month: return {'month': last_month, 'day': v['day'] + 1, } raise ValueError('Invalid month') def create_zodiac_term_dict(): """ 各星座の期間を辞書型で返す """ zodiac_term_dict = {} for k, v in zodiac_sign_days.items(): zodiac_term_dict[k] = { 'from': get_first_month_day_of_zodiac_sign(v['month']), 'to': {'month': v['month'], 'day': v['day']}, } return zodiac_term_dict def get_zodiac_sign_name(zodiac_term_dict, dt): """ returns zodiac sign name :param dt: :return: """ month = dt.month day = dt.day for k, v in zodiac_term_dict.items(): if v['from']['month'] == month: if v['from']['day'] <= day: return k elif v['to']['month'] == month: if v['to']['day'] >= day: return k raise ValueError('Invalid date')
""" zodiac.py 内の各関数のテストコード 山羊座の最終日: 1月19日 射手座の最終日: 12月21日 以上から、1年のうちで、特に以下について検証する 山羊座の最終日より前の日付 山羊座の最終日 水瓶座の初日 射手座の最終日より前の日付 射手座の最終日 山羊座の初日 山羊座の初日以降の日付 """ from datetime import date import pytest from zodiac import get_first_month_day_of_zodiac_sign, create_zodiac_term_dict, get_zodiac_sign_name # get_first_month_day_of_zodiac_sign のテスト群 def test_get_first_month_day_of_zodiac_sign_month_1(): result = get_first_month_day_of_zodiac_sign(1) assert result == {'month': 12, 'day': 22} def test_get_first_month_day_of_zodiac_sign_month_2(): result = get_first_month_day_of_zodiac_sign(2) assert result == {'month': 1, 'day': 20} def test_get_first_month_day_of_zodiac_sign_month_12(): result = get_first_month_day_of_zodiac_sign(12) assert result == {'month': 11, 'day': 22} def test_get_first_month_day_of_zodiac_sign_raise(): """ raise ValueError('Invalid month') """ with pytest.raises(ValueError): get_first_month_day_of_zodiac_sign(0) # create_zodiac_term_dict のテスト def test_create_zodiac_term_dict(): result = create_zodiac_term_dict() assert result['山羊座']['from'] == {'month': 12, 'day': 22} assert result['山羊座']['to'] == {'month': 1, 'day': 19} assert result['水瓶座']['from'] == {'month': 1, 'day': 20} assert result['水瓶座']['to'] == {'month': 2, 'day': 18} assert result['射手座']['from'] == {'month': 11, 'day': 22} assert result['射手座']['to'] == {'month': 12, 'day': 21} # get_zodiac_sign_name のテスト def test_get_zodiac_sign_name_first_day_of_year(): """ 1月1日についてテスト """ dt = date(2022, 1, 1, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '山羊座' def test_get_zodiac_sign_name_last_day_of_capricorn(): """ 山羊座の終了日についてテスト """ dt = date(2022, 1, 19, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '山羊座' def test_get_zodiac_sign_name_first_day_of_aquarius(): """ 水瓶座の開始日についてテスト """ dt = date(2022, 1, 20, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '水瓶座' def test_get_zodiac_sign_name_first_day_of_sagitarius(): """ 射手座の開始日についてテスト """ dt = date(2022, 11, 22, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '射手座' def test_get_zodiac_sign_name_middle_of_sagitarius(): """ 射手座の中間日についてテスト """ dt = date(2022, 12, 10, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '射手座' def test_get_zodiac_sign_name_last_day_of_sagitarius(): """ 射手座の終了日についてテスト """ dt = date(2022, 12, 21, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '射手座' def test_get_zodiac_sign_name_before_capricorn_last_day(): """ 1月1日より後で、山羊座の終了日より前についてテスト """ dt = date(2022, 12, 25, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '山羊座' def test_get_zodiac_sign_name_last_day_of_year(): """ 12月31日についてテスト """ dt = date(2022, 12, 31, ) zodiac_term_dict = create_zodiac_term_dict() result = get_zodiac_sign_name(zodiac_term_dict, dt) assert result == '山羊座' def test_get_zodiac_sign_name_raise(): """ raise ValueError('Invalid date') """ dt = date(2022, 12, 31, ) zodiac_term_dict = { "ほげ座": { 'from': {"month": 1, "day": 20}, 'to': {"month": 2, "day": 18}, }, } with pytest.raises(ValueError): get_zodiac_sign_name(zodiac_term_dict, dt)
(コメントID: 8167)
""" zodiac.py のテストコード (Python 標準の unit test にて) """ from datetime import date from unittest import TestCase from zodiac import get_first_month_day_of_zodiac_sign, create_zodiac_term_dict, get_zodiac_sign_name class TestGetFirstMonthDayOfZodiacSign(TestCase): """ get_first_month_day_of_zodiac_sign のテスト群 1, 2, 12, 不正な値たる0 についてテスト """ def test_1(self): result = get_first_month_day_of_zodiac_sign(1) self.assertEqual(result, {'month': 12, 'day': 22}) def test_2(self): result = get_first_month_day_of_zodiac_sign(2) self.assertEqual(result, {'month': 1, 'day': 20}) def test_12(self): result = get_first_month_day_of_zodiac_sign(12) self.assertEqual(result, {'month': 11, 'day': 22}) def test_raise(self): """ raise ValueError('Invalid month') """ with self.assertRaises(ValueError): get_first_month_day_of_zodiac_sign(0) class TestCreateZodiacTermDict(TestCase): """ create_zodiac_term_dict のテスト 生成された辞書内の間違いがありそうな箇所だけ検証 """ def test_create_zodiac_term_dict(self): result = create_zodiac_term_dict() self.assertEqual(result['山羊座']['from'], {'month': 12, 'day': 22}) self.assertEqual(result['山羊座']['to'], {'month': 1, 'day': 19}) self.assertEqual(result['水瓶座']['from'], {'month': 1, 'day': 20}) self.assertEqual(result['水瓶座']['to'], {'month': 2, 'day': 18}) self.assertEqual(result['射手座']['from'], {'month': 11, 'day': 22}) self.assertEqual(result['射手座']['to'], {'month': 12, 'day': 21}) class TestGetZodiacSignName(TestCase): """ get_zodiac_sign_name のテスト 1年のうちで、特に以下について検証する 山羊座の最終日より前の日付 山羊座の最終日 水瓶座の初日 射手座の最終日より前の日付 射手座の最終日 山羊座の初日 山羊座の初日以降の日付 """ def setUp(self): self.zodiac_term_dict = create_zodiac_term_dict() def test_first_day_of_year(self): dt = date(2022, 1, 1) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '山羊座') def test_before_last_day_of_capricorn(self): dt = date(2022, 1, 10) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '山羊座') def test_last_day_of_capricorn(self): dt = date(2022, 1, 19) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '山羊座') def test_first_day_of_aquarius(self): dt = date(2022, 1, 20) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '水瓶座') def test_before_last_day_of_sagittarius(self): dt = date(2021, 12, 20) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '射手座') def test_first_day_of_sagitarius(self): dt = date(2021, 11, 22) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '射手座') def test_mid_of_sagitarius(self): dt = date(2021, 12, 5) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '射手座') def test_last_day_of_sagitarius(self): dt = date(2021, 12, 21) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '射手座') def test_over_lat_day_ov_sagitarius(self): dt = date(2021, 12, 22) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '山羊座') def test_last_day_of_year(self): dt = date(2021, 12, 31) result = get_zodiac_sign_name(self.zodiac_term_dict, dt) self.assertEqual(result, '山羊座') def test_raise(self): """ raise ValueError('Invalid month') """ zodiac_term_dict = { "ほげ座": { 'from': {"month": 1, "day": 20}, 'to': {"month": 2, "day": 18}, }, } with self.assertRaises(ValueError): get_zodiac_sign_name(zodiac_term_dict, date(2021, 1, 1))
(コメントID: 8168)
if __name__ == "__main__": import doctest doctest.testmod()
python .\zodiac.py -v
from datetime import date zodiac_sign_days = { # 各星座の最終日だけを記載 "山羊座": {"month": 1, "day": 19}, "水瓶座": {"month": 2, "day": 18}, "魚座": {"month": 3, "day": 20, }, "牡羊座": {"month": 4, "day": 19, }, "牡牛座": {"month": 5, "day": 20, }, "双子座": {"month": 6, "day": 20, }, "蟹座": {"month": 7, "day": 22, }, "獅子座": {"month": 8, "day": 22, }, "乙女座": {"month": 9, "day": 22, }, "天秤座": {"month": 10, "day": 22, }, "蠍座": {"month": 11, "day": 21, }, "射手座": {"month": 12, "day": 21, }, } def get_first_month_day_of_zodiac_sign(month): """ 各星座の最終日を含む月から、その星座の最初の日を返す :return: {'month': 1, 'day': 20} といった形式の辞書 >>> get_first_month_day_of_zodiac_sign(1) {'month': 12, 'day': 22} >>> get_first_month_day_of_zodiac_sign(2) {'month': 1, 'day': 20} >>> get_first_month_day_of_zodiac_sign(12) {'month': 11, 'day': 22} >>> get_first_month_day_of_zodiac_sign(0) Traceback (most recent call last): ... ValueError: Invalid month """ if month == 1: last_month = 12 else: last_month = month - 1 for k, v in zodiac_sign_days.items(): if v['month'] == last_month: return {'month': last_month, 'day': v['day'] + 1, } raise ValueError('Invalid month') def create_zodiac_term_dict(): """ 各星座の期間を辞書型で返す >>> create_zodiac_term_dict()['山羊座']['from'] {'month': 12, 'day': 22} >>> create_zodiac_term_dict()['山羊座']['to'] {'month': 1, 'day': 19} >>> create_zodiac_term_dict()['水瓶座']['from'] {'month': 1, 'day': 20} >>> create_zodiac_term_dict()['水瓶座']['to'] {'month': 2, 'day': 18} >>> create_zodiac_term_dict()['射手座']['from'] {'month': 11, 'day': 22} >>> create_zodiac_term_dict()['射手座']['to'] {'month': 12, 'day': 21} """ zodiac_term_dict = {} for k, v in zodiac_sign_days.items(): zodiac_term_dict[k] = { 'from': get_first_month_day_of_zodiac_sign(v['month']), 'to': {'month': v['month'], 'day': v['day']}, } return zodiac_term_dict def get_zodiac_sign_name(zodiac_term_dict, dt): """ returns zodiac sign name :param dt: >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 1, )) '山羊座' >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 10, )) '山羊座' >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 19, )) '山羊座' >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 20, )) '水瓶座' >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 18, )) '射手座' >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 21, )) '射手座' >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 22, )) '山羊座' >>> get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 31, )) '山羊座' """ month = dt.month day = dt.day for k, v in zodiac_term_dict.items(): if v['from']['month'] == month: if v['from']['day'] <= day: return k elif v['to']['month'] == month: if v['to']['day'] >= day: return k raise ValueError('Invalid date') zodiac_term_dict = create_zodiac_term_dict() if __name__ == "__main__": import doctest doctest.testmod()
(コメントID: 8170)
(venv) PS D:\projects\lessons\lesson_entries_comments> pytest ========================== test session starts ========================== platform win32 -- Python 3.11.0, pytest-7.3.1, pluggy-1.0.0 rootdir: D:\projects\lessons\lesson_entries_comments collected 30 items test_zodiac_pytest.py .............. [ 46%] test_zodiac_unittest.py ................ [100%] ========================== 30 passed in 0.03s =========================== (venv) PS D:\projects\lessons\lesson_entries_comments> python -m unittest ................ ---------------------------------------------------------------------- Ran 16 tests in 0.001s OK (venv) PS D:\projects\lessons\lesson_entries_comments> python .\zodiac.py -v Trying: create_zodiac_term_dict()['山羊座']['from'] Expecting: {'month': 12, 'day': 22} ok Trying: create_zodiac_term_dict()['山羊座']['to'] Expecting: {'month': 1, 'day': 19} ok Trying: create_zodiac_term_dict()['水瓶座']['from'] Expecting: {'month': 1, 'day': 20} ok Trying: create_zodiac_term_dict()['水瓶座']['to'] Expecting: {'month': 2, 'day': 18} ok Trying: create_zodiac_term_dict()['射手座']['from'] Expecting: {'month': 11, 'day': 22} ok Trying: create_zodiac_term_dict()['射手座']['to'] Expecting: {'month': 12, 'day': 21} ok Trying: get_first_month_day_of_zodiac_sign(1) Expecting: {'month': 12, 'day': 22} ok Trying: get_first_month_day_of_zodiac_sign(2) Expecting: {'month': 1, 'day': 20} ok Trying: get_first_month_day_of_zodiac_sign(12) Expecting: {'month': 11, 'day': 22} ok Trying: get_first_month_day_of_zodiac_sign(0) Expecting: Traceback (most recent call last): ... ValueError: Invalid month ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 1, )) Expecting: '山羊座' ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 10, )) Expecting: '山羊座' ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 19, )) Expecting: '山羊座' ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 1, 20, )) Expecting: '水瓶座' ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 18, )) Expecting: '射手座' ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 21, )) Expecting: '射手座' ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 22, )) Expecting: '山羊座' ok Trying: get_zodiac_sign_name(create_zodiac_term_dict(), date(2022, 12, 31, )) Expecting: '山羊座' ok Trying: get_zodiac_sign_name({"ほげ座": {'from': {"month": 1, "day": 20}, 'to': {"month": 2, "day": 18}, }, }, date(2022, 3, 18, )) Expecting: Traceback (most recent call last): ... ValueError: Invalid date ok 1 items had no tests: __main__ 3 items passed all tests: 6 tests in __main__.create_zodiac_term_dict 4 tests in __main__.get_first_month_day_of_zodiac_sign 9 tests in __main__.get_zodiac_sign_name 19 tests in 4 items. 19 passed and 0 failed. Test passed.
(コメントID: 8172)
(コメントID: 8174)
Captcha:
たった1ヶ月で人生が劇的に変わりました
佐藤信さん
役員クラスの方から高い評価を受けるようになりました。
佐賀県 - 岩本徹さん
今までまったく知らなかったショートカットキーを使いまくっています。
東京都 - 鷹觜慶さん
年齢60才間近、営業で外回りの時間が多い私でも退社時間が1-2時間程度早くなりました。
東京都 - 宗内隆明さん
受講前もすでにパソコン得意でしたが、そんな私でも受講して本当に良かったと思えた講座です。
東京都 - 佐伯とも子さん
ここまで包括的に仕事に役立つ深い学びを受けれた講座は初めてでした
東京都 - 飯田倫子さん
2024年12月15日 22:47
2024年12月14日 06:16
2024年12月02日 10:35
2024年11月30日 11:04
2024年11月27日 09:59
2024年12月17日 07:25
2024年12月17日 05:44
2024年12月16日 10:51
2024年12月16日 10:02
2022年02月24日 10:59
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
2022年02月02日 00:00
2022年02月02日 03:00
2022年02月02日 06:00
2022年02月02日 09:00
2022年02月02日 12:00
2024年12月19日 11:30
2024年12月18日 13:30
2024年10月21日 17:30
2024年10月18日 17:00
2024年10月17日 17:30
2024年11月27日 11:48
2024年11月25日 12:07
2024年11月17日 09:51
2024年11月15日 16:41
2024年11月15日 13:07
沖津さんの投稿
(投稿ID: 5371)
と思ったのですが…
daysから年齢を割り出すのは
うるう年を考えると計算が難しくて断念しました💦
別の方法ですが、
なんとか無理やり計算することに成功したのでうれしいです😊
ちなみに誕生日はうちの犬の誕生日です。
小川 慶一さんのコメント
(コメントID: 7742)
日付を扱うのであれば、 datetime 型でなく date 型を使う方が良いでしょう。
沖津さんのコメント
(コメントID: 7746)
ありがとうございます😊
小川 慶一さんのコメント
(コメントID: 7757)
藤本 博子さんのコメント
(コメントID: 7761)
はじめまして。藤本と申します。
サンプルコードの掲載ありがとうございます。
誕生日と今日の日付を、年・月・日に分割して条件分岐するのですね。
大変参考になりました。ありがとうございます。
犬さんの誕生日なのですね(#^.^#)
以前、実務で年齢と月齢を算出する表を作成していたので、pythonでもコードを書いてみようと思いました。
沖津さんのコードが参考になりました。
ありがとうございます。
藤本 博子さんのコメント
(コメントID: 7762)
input関数で入力する形式
誤り "yy/m/d"
正しい "yyyy/m/d で入力してください”の間違えでした。
大変失礼しました。
たかちゃんさんのコメント
(コメントID: 7775)
面白いですね。
私も練習で書いてみようと思います。(^^)
沖津さんのコメント
(コメントID: 7776)
私のコード、一部まちがってましたね💦
(今日の月と誕生月が同じだった時の処理)
テスト不足で気がつかず…
失礼しました。
୨୧・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・୨୧
小川先生
replace関数で
誕生日の年➡今日の年に置き換える方法!
そんな使い方もできると知ってビックリしました😯
月を調べる過程がめんどうだと思っていたので💦
すっきり書く方法がわかって勉強になりました。
ありがとうございます。
୨୧・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・୨୧
藤本博子さん
私のコードが参考になったといってくださり、うれしいです😊
犬🐶の誕生日!
コードを書いて試すときに
自分の好きなものに関連して書くと楽しいので
ついつい使ってます。
藤本さんもコードも動かしてみました!
ちゃんと月齢まで出るのがすごいです。
def っていうのを見た瞬間!
わからなすぎてギョッとしたのですが(笑)
くわしくメモを書いていてくださっていたので
意味が分かりました。
わたしの今の知識でも月齢まで出せないか?
チャレンジしてみたいと思います!
条件分岐のところ
参考にさせていただきます😍
沖津さんのコメント
(コメントID: 7777)
コメントありがとうございます!
たかちゃんさんもワンちゃん🐶がおられるんですね♪
ついついやってしまいたくなる気持ち!
すごくわかります😁
沖津さんのコメント
(コメントID: 7778)
藤本 博子さんのコメント
(コメントID: 7780)
ご返事ありがとうございます。
沖津さんの月齢を算出するロジック、演算子の使い方、ともに洗練されていて、すごい!と思いました。
今度、このようなコードを書くことがあった時、真似します!
すごく勉強になりました。
ありがとうございます!!
田中 宏明さんのコメント
(コメントID: 7781)
さっそくreplace関数を使いこなされていますね。
月齢のマイナスを調整したら、同時に年齢も調整する必要がありそうです。
コードがシンプルだと何をしているのか直感的に理解できていいですね。
沖津さんのコメント
(コメントID: 7788)
ありがとうございます!
私ももっと複雑な感じになるかな?と思っていたのですが。。
たまたまこんなにスッキリ書けたので驚きでした😆
୨୧┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈୨୧
田中弘明さん
コメントありがとうございます😊
replaceの使い方、早速マネしました👍
年齢の取り出しについては、小川先生から教わったところで完了しているので、問題なしです♪
とはいえ。。
私もあまりにスッキリ書けてしまったので何か足りないのでは??と不安になり、テストをたくさんしました🤣
田中 宏明さんのコメント
(コメントID: 7789)
年齢を調整したらダメですね。
テストできるようになりたいです。
小川 慶一さんのコメント
(コメントID: 7793)
ゆみこさんのコメント
(コメントID: 8164)
>テストコードの書き方講座
これは、どの動画にありますでしょうか?
講座動画のタイトルを一通り確認してみたものの、該当しそうなものを見つけることができませんでした。
取り組むのはもう少し先になりますが、どのような感じか先に把握しておきたいです。
どうぞよろしくお願いいたします。
小川 慶一さんのコメント
(コメントID: 8166)
たとえば以下の zodiac.py があるとして、pytestで書くなら以下のとおりです。
(実行にあたっては、以下によって pytest をインストールしてください)
zodiac.py
test_zodiac.py
小川 慶一さんのコメント
(コメントID: 8167)
pip 不要ですが、 pytest より作法がやや面倒くさいです。
小川 慶一さんのコメント
(コメントID: 8168)
これだと、別途 unit test を書く必要はありません。
>>> は、 Python シェルで見かける記号ですね。
その下段は、期待される出力結果です。
zodiac.py 後半で以下の記述があります。
これにより、当該モジュールを単体で呼び出したときは docstring 内で記述された関数が実行された場合の期待されます。
そして、出力結果が期待される出力結果と一致しなければエラーになります。
テストが正常に動いていることを確認するには、適当に期待される結果を書き換えてから実行してみてください。
その後、 PyCharm の zodiac.py のタブを右クリック→実行でエラーが出ることを確認できます。
あるいは、ターミナルから、以下のコマンド実行でもOKです。
zodiac.py
小川 慶一さんのコメント
(コメントID: 8170)
ゆみこさんのコメント
(コメントID: 8172)
複数の例のご提示をありがとうございます。
>この講座だけ、まだ作れてないのです。
承知しました。
今回いただいた内容で、まずは自分なりに実行したり調べたりしてみます。
できましたら、まずは「pytest, unittest, doctestの基礎講座」的な動画の作成またはゼミ開催をしていただけると幸いです。
(それぞれの方法に対する小川先生のご見解などを、早めにうかがいたいため)
ご検討のほど、よろしくお願いいたします。
ゆみこさんのコメント
(コメントID: 8174)
改めまして、テストのコードや実行結果のご提示、ありがとうございました。
中身をきちんと読み込めてはいないのですが、最初に確認しておきたいことは確認できました。
<やったこと>
1. 以下3ファイルを作成後、4種類の方法でテストを実行しました。
(pytest, unittest, zodiac.py実行, ターミナルからの実行)
test_zodiac_pytest.py
test_zodiac_unittest.py
zodiac.py ( https://forum.pc5bai.com/lesson/entry/id/5371/#cid8168 のコードを使用)
2. それぞれの期待される出力結果を変更して実行し、テストでエラーになるケースも試してみました。
3. test_zodiac_pytest.py のテストケースを追加し、カバレッジの割合が変わることを確認しました。
<感想など>
・まず、小川先生が書いてくださった内容で実行できたことで、自分の成長を感じました。
(以前の私なら知識と理解が足りず、おそらく実行できなかった)
・pytestはunittestで書いたものも併せて実行してくれることが、実行したことで理解できてうれしかったです。
(小川先生が貼ってくださった実行結果を見たときは「なぜtest_zodiac_unittest.pyの方も出力されているのだろう?」と思っていたため)
・「pytestの実行結果に出てくるパーセンテージはなんだろう?」という疑問を持った後、調べたり実行したりという行動に移せたのがよかったです。
・今後関数を書くときは、まずdoctestで検証するところから始めてみようと考えています。
テストについては一旦以上とし、また講座動画への取り組みを進めます。