2_python--算法--判断年份是否是闰年

本文介绍了一个用于判断闰年的Python函数,详细阐述了闰年判断的算法思想,包括世纪年和平年的判断条件,以及如何通过该函数判断不同年份是否为闰年。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# leap_year.py
def is_leap_year(year: int) -> bool:
    """
    判断年份是否是闰年

    闰年的2月有29天,平年的2月只有28天。

    算法思想:
        (1) 判断是否是世纪年。
        (2) 若是世纪年,判断能否被400整除。若可以被整除,则是闰年;否则是平年。
        (3) 若是平年,判断能否被4整除。若可以被整除,则是闰年;否则是平年。

    :param year: 年份
    :return: 闰年返回True,平年返回False
    """
    if not year % 100:
        # 世纪年
        if year % 400:
            # 不能被400整除,平年
            return False
        else:
            # 能被400整除,闰年
            return True
    else:
        # 普通年
        if year % 4:
            # 不能被4整除,平年
            return False
        else:
            # 能被400整除,闰年
            return True


if __name__ == '__main__':
    result = is_leap_year(1900)
    print(result)
    result = is_leap_year(2000)
    print(result)
    result = is_leap_year(2010)
    print(result)
    result = is_leap_year(2016)
    print(result)


"""
运行结果:
False
True
False
True

Process finished with exit code 0
"""
对于输入格式 "4-2"(代表--日),要判断是星期几,你需要一个类似上面提到的算法。首先,需要将输入的日期转换为可以计算星期数的标准格式,通常是天数(从初第一天开始计数)加上额外的调整,因为闰年和平对星期的影响不同。 通常步骤如下: 1. 将每个数字分开,例如:年份为4,月份为2,日期为22. 根据格里高利历(Gregorian calendar)计算总天数,考虑到闰年规则(每四一闰,百不闰,四百多再闰)。 3. 使用上述提供的公式(如Zeller's congruence或其他类似算法)计算给定日期在当的星期数。 这里给出一个简化版的伪代码示例: ```python def is_weekday(year, month, day): if not (1 <= month <= 12) or not (1 <= day <= 31): # 验证日期有效性 return None days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 考虑闰年 if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0): days_in_month[2] = 29 total_days = sum(days_in_month[:month]) + day if leap_year_check(year): # 添加闰年的额外一天 total_days += 1 # Zeller's congruence 或其他类似算法来计算星期 # 假设 W 表示星期,公式可能会有所不同,这里略去具体细节 # 总体上就是用总天数除以7并向下取整得到余数,然后映射到星期0-6 week_number = total_days // 7 return week_number # 判断是否为闰年的辅助函数 def leap_year_check(year): # 简化版本,实际应用中可能需要更精确的闰年检查 return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 # 示例: date_input = input("请输入日期(格式:4-2-2):") if '-' in date_input: year, month, day = map(int, date_input.split('-')) weekday = is_weekday(year, month, day) print(f"{date_input}是星期{weekday}") else: print("无效的日期格式") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值