آموزش محاسبه سن در پایتون: چطور در پایتون سن افراد را محاسبه کنیم؟

فهرست مطالب این نوشته
Toggleدر روند ثبتنام سایتها و اپلیکیشنها، از کاربر تاریخ تولد دریافت میشود تا اطلاعات سن، برای بررسی شرایط عضویت یا نمایش محتواهای متناسب با سن استفاده شود. از بانکها گرفته تا شبکههای اجتماعی دانستن سن واقعی کاربر یک الزام است.

پایتون روشهای مختلف و دقیقی برای انجام این کار ارائه میدهد که هر کدام یک سری مزایای خاصی دارند. برای یادگیری 4 روش محاسبه سن در پایتون همراهمان باشید.
چرا محاسبه سن به این سادگیها هم نیست؟
بعضیها فکر میکنند برای محاسبه سن کافی است سال تولد را از سال جاری کم کنیم! ولی موضوع به این سادگی نیست. تولد گذشته یا نگذشته؟ سال کبیسه داریم یا نه؟ آیا تولد در ۲۹ فوریه (یا همان 30 اسفند) است؟ همین موارد کافیاند تا بفهمیم اگر میخواهید سن را درست و دقیق محاسبه کنید، باید حرفهایتر به قضیه نگاه کنید.
روش اول: محاسبه سن در پایتون با ماژول datetime (روش استاندارد)
محاسبه سن در پایتون با ماژول datetime روش استاندارد و راحتی است که در ادامه بررسی کردهایم.
نمونه کد محاسبه سن در پایتون:
from datetime import date
def calculate_age(birthdate):
today = date.today()
age = today.year – birthdate.year – ((today.month, today.day) < (birthdate.month, birthdate.day))
return age
# مثال
print(calculate_age(date(2000, 1, 1))) # خروجی: 24
در این روش پایتون با استفاده از مقایسه (today.month, today.day) < (birthdate.month, birthdate.day) تشخیص میدهد که آیا تولد در سال جاری گذشته یا هنوز نرسیده است. در ضمن این کد بهصورت مستقیم با کلاس date کار میکند و هیچ کتابخانه جانبی نیاز ندارد.
نکته: با روش اول، محاسبه سن در پایتون حتی سالهای کبیسه را نیز بهدرستی مدیریت میکند.
روش دوم: مدیریت خاص متولدین ۲۹ فوریه (Leap Year)
برای محاسبه سن در پایتون، یک مساله مهم وجود دارد و آن هم مدیریت تولدهایی است که در ۲۹ فوریه اتفاق میافتند. این روز فقط در سالهای کبیسه وجود دارد و در سایر سالها باید با دقت خاصی هندل شود.
کد پیشرفته برای مدیریت Leap Year:
from datetime import date
def calculate_age(born):
today = date.today()
try:
birthday = born.replace(year=today.year)
except ValueError:
birthday = born.replace(year=today.year, month=3, day=1)
return today.year – born.year – (birthday > today)
مزایا leap year چیست:
- جلوگیری از خطای ValueError
- تبدیل خودکار ۲۹ فوریه به ۱ مارس در سالهای غیرکبیسه
- کاملاً منطبق با استانداردهای بینالمللی
برای تبدیل تاریخ در پایتون نیز میتوانید از ابزارها و کتابخانه های نصبی پایتون یا کدنویسی اقدام کنید.
روش سوم: استفاده از تفاضل تعداد روزها
برای روش سوم میخواهیم راهکاری را بررسی کنیم که خیلی سریع و راحت است؛ اما به هیچ عنوان برای استفادههای رسمی پیشنهاد نمیشود.
برای مثال محاسبه سن با استفاده از سال تولد در پایتون به شرح زیر است:
from datetime import date
def calculate_age(birthdate):
days_per_year = 365.2425
age = int((date.today() – birthdate).days / days_per_year)
return age
محدودیتها:
- خطای حدودی ±۱ سال در موارد معدودی
- در محاسبات دقیق قابل اعتماد نیست
روش چهارم: استفاده از کتابخانه dateutil
اگر پروژهتان بزرگتر است و به دقتی بیشتر از تفریق ساده نیاز دارید، کتابخانه dateutil میتواند انتخاب خوبی باشد. به خصوص زمانی که باید با مناطق زمانی یا تاریخهای پیچیده کار کنید.
نصب:
pip install python-dateutil
کد پایتون محاسبه عمر کاربر با دریافت سن:
from dateutil.relativedelta import relativedelta
from datetime import date
def calculate_age(birth_date):
return relativedelta(date.today(), birth_date).years
یک مقایسه بین 4 روش: کدام بهتر است؟
معیار | روش datetime | کتابخانه dateutil | تفاضل روزها |
---|---|---|---|
دقت مطلق | |||
نیاز به نصب کتابخانه | |||
مدیریت سال کبیسه | |||
پیچیدگی کد | متوسط | ساده | ساده |
مناسب برای حقوقی |
30 اسفند را چه کار کنیم؟
۲۹ فوریه یا 30 اسفند یک چالش در روند محاسبه سن در پایتون است. چرا؟ چون تولد فقط در سالهای خاصی وجود دارد. جالب است بدانید تنها ۰.۰۷٪ از مردم در این تاریخ به دنیا میآیند. اما همین درصد کم هم باید به درستی مدیریت شوند.
مثالی از بررسی سن قانونی
فرض کنید میخواهید مطمئن شوید کاربران شما بالای ۱۸ سال هستند.
from datetime import date
def calculate_age(birthdate):
today = date.today()
return today.year – birthdate.year – ((today.month, today.day) < (birthdate.month, birthdate.day))
def validate_age(birthdate, min_age=18):
return calculate_age(birthdate) >= min_age
birthdate = date(2010, 3, 15)
print(“واجد شرایط:” if validate_age(birthdate) else “غیرمجاز”)
آیا از زبانهای دیگر هم میتوان الگوبرداری کرد؟
بله! در محاسبه سن از روی تاریخ تولد در C# از کلاس DateTime و متد Subtract استفاده میشود. یا در برنامه محاسبه سن در C++، از کلاس chrono برای محاسبه فاصله زمانی استفاده میکنند. اما پایتون هم ساده و هم سریع است و به همین دلیل خیلی از توسعهدهندگان این زبان را ترجیح میدهند.
سخن پایانی
محاسبه سن در پایتون با ۴ روش قابل انجام است که معتبرترین آنها استفاده از ماژول datetime است.
البته بسته به نیاز پروژه، میتوانید از روشهای دیگر هم استفاده کنید، اما همیشه دقت و عملکرد را در اولویت قرار دهید.
در صورتی که تمایل به یادگیری پایتون دارید و قصد دارید فهم مباحث را به شکل عمیقتر بهبود دهید، برایتان خبرهای خوبی داریم. ما در آکادمی چابک دورههایی تخصصی و پروژهمحور طراحی کردهایم که دقیقاً به همین مهارتها میپردازد. از مفاهیم پایه مثل کار با تاریخ و زمان گرفته تا ساخت اپلیکیشنهای واقعی، همه چیز را به زبان ساده و با مثالهای کاربردی آموزش میدهیم.
منبع:
دیدگاهتان را بنویسید