تشخیص سال کبیسه در پایتون
در تقویم میلادی سالی کبیسه است که بر ۴ بخشپذیر باشد، مگر اینکه بر ۱۰۰ هم بخشپذیر باشد؛ اما سالی که بر ۴۰۰ بخشپذیر است باز هم کبیسه است. در پایتون همهٔ این قاعده در یک شرط با and و or نوشته میشود.
صورت سؤال
برنامهای بنویسید که یک سال میلادی را از ورودی بخواند. اگر سال کبیسه بود «کبیسه» و در غیر این صورت «غیر کبیسه» را چاپ کنید.
این قاعده مخصوص تقویم میلادی است. تقویم هجری شمسی قاعدهٔ دیگری دارد و این برنامه برای سال شمسی جواب درست نمیدهد.
ورودی نمونه
1900
خروجی نمونه
غیر کبیسه
خودتان امتحان کنید
کد را در ویرایشگر زیر کامل کنید و اجرا کنید. ورودی نمونه در کادر ورودی آماده است و بعد از هر اجرا، خروجی شما با خروجی نمونه مقایسه میشود.
کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.
راهنمایی
سه بخشپذیری را بررسی کنید: بر ۴، بر ۱۰۰ و بر ۴۰۰. سال کبیسه است اگر بر ۴۰۰ بخشپذیر باشد، یا بر ۴ بخشپذیر باشد و بر ۱۰۰ نباشد.
جواب و توضیح
بهتر است جواب را بعد از امتحان کردن راه خودتان باز کنید.
نمایش جواب
year = int(input())
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
print("کبیسه")
else:
print("غیر کبیسه")این جواب چطور کار میکند؟
بخشپذیری با عملگر باقیمانده بررسی میشود: year % 4 == 0 یعنی سال بر ۴ بخشپذیر است و year % 100 != 0 یعنی بر ۱۰۰ بخشپذیر نیست.
شرط دو حالت دارد که با or به هم وصل شدهاند. حالت اول سالهایی مثل ۲۰۰۰ است که بر ۴۰۰ بخشپذیرند. حالت دوم سالهایی مثل ۲۰۲۴ است که بر ۴ بخشپذیرند ولی بر ۱۰۰ نه. پرانتز لازم نیست، چون and پیش از or حساب میشود، اما خواندن شرط را سادهتر میکند.
سال ۱۹۰۰ بر ۴ و بر ۱۰۰ بخشپذیر است، اما بر ۴۰۰ نه. هیچکدام از دو حالت برقرار نیست و برنامه «غیر کبیسه» چاپ میکند. همین سالها هستند که شرط سادهتر «بخشپذیر بر ۴» را غلط میکنند.
راه دوم: ماژول calendar
import calendar
year = int(input())
if calendar.isleap(year):
print("کبیسه")
else:
print("غیر کبیسه")تابع calendar.isleap همین قاعده را پیاده کرده است و در برنامهٔ واقعی بهتر است از آن استفاده کنید. نوشتن شرط با دست برای تمرین منطق and و or مفید است.
اشتباههای رایج
- فقط بخشپذیری بر ۴ را بررسی میکنند و سالهایی مثل ۱۹۰۰ را کبیسه میدانند.
- شرطها را با if و elif به ترتیب اشتباه میچینند؛ اگر اول بخشپذیری بر ۱۰۰ بررسی شود، سال ۲۰۰۰ غیر کبیسه حساب میشود.
- همین قاعده را برای سال شمسی به کار میبرند، در حالی که تقویم شمسی قاعدهٔ جداگانهای دارد.
تمرین بعدی
پایتون را قدمبهقدم یاد بگیرید
این تمرین یکی از تمرینهای پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره میگیرد؛ درسهای اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.