Python:lec-06判断第几天

该博客介绍了如何在Python中判断某一年的第几天,考虑了不同月份天数及闰年的判断。从元组开始,逐步引入集合和字典,讲解了它们的特点和在问题解决中的应用,特别是字典在表示月份天数对应关系上的作用。

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

案例描述:

  • 输入某年某月某日,判断这一天是这一年的第几天?
  • 例子:

                输入的日期为2019/06/03,这是2019年的第几天?

                输入的日期为2000/01/03,这是2000年的第几天?

  • 分析

1)、每个月份的天数不同

2)、闰年与平年的2月份天数不同

3)、闰年判断:四年一闰,百年不闰,四百年再闰

  • 2.0增加功能:用列表代替元组
  • 3.0增加功能:将月份划分为不同的集合再操作
  • 4.0增加功能:将月份及其对应天数通过字典表示

元组

  • 元组(tuple)
  • 一旦被创建就不能修改,使得代码更安全

1)元组中的元素值是不允许修改的,但我们可以对元组进行连接组合

2)元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组

 

  • 使用括号和圆括号来表示,如(‘red’,'blue','green'),(2,4,6)
  • 访问方式和列表相同
  • 一般用于表达固定数据项、函数多返回值等情况

特点:

1)元组中的元素可以是不同类型的

tup1 = ('physics', 'chemistry', 1997, 2000)
print(tup1)

结果:

2)元祖中各元素存在先后关系,可通过索引访问元组中的元素

 集合

Python3集合

  • Python中的集合(set)类型同数学中的集合概念一致,即包含0或多个数据项的无序组合
  • 集合中的元素不可重复
  • 集合是无序组合,没有索引和位置的概念
  • set()函数用于集合的生成,返回结果是一个无重复且排序任意的集合
  • 集合通常用于表示成员间的关系、元素去重等

字典

  • 字典类型(dict)是“键-值”数据项的组合,每个元素是一个键值对

  • 字典类型数据通过映射查找数据项

  • 映射:通过任意键查找集合中的值得过程

  • 字典类型以键为索引,一一对应

  • 字典类型的数据是无序的 

  • 字典的操作:

       1)增加一项:d[key]=value

        2)访问 : d[key]

        3) 删除某项:del  d[key]

         4)查找key是否在字典中: key in d

         5)遍历所有的key

for key in d.keys():
    print(key)

          6)遍历所有的value

for value in d.values():
    print(value)

         7)遍历所有的数据项

for item in d.items():
    print(items)

         


from datetime import datetime
import math


def is_leap_year(year):
    """
    判断是否为闰年
    """
    is_leap = False
    if ((year % 4 == 0)and (year % 100 != 0)) or (year % 400 == 0):
        is_leap = True
    return is_leap


def main():
    """
    主函数
    """
    input_date_str = input("请输入日期(yyyy/mm/dd): ")
    input_date = datetime.strptime(input_date_str, '%Y/%m/%d')
    year = input_date.year
    month = input_date.month
    day = input_date.day
    # 用集合
    # _30_days_month_set = {4, 6, 9, 11}
    # _31_days_month_set = {1, 3, 5, 7, 8, 10, 12}
    # 4.0版本用字典
    # month_day_dict = {1: 31,
    #                   2: 28,
    #                   3: 31,
    #                   4: 30,
    #                   5: 31,
    #                   6: 30,
    #                   7: 31,
    #                   8: 31,
    #                   9: 30,
    #                   10: 31,
    #                   11: 30,
    #                   12: 31, }
    # 课后练习
    day_month_dict = {31: {1, 3, 5, 7, 8, 10, 12},
                      30: {4, 6, 9, 11},
                      28: {2}, }
    days = day
    for key, value in day_month_dict.items():
        # 取i对应的value
        for i in range(1, month):
            if i in value:
                print(key)
                days += key

        # if i in _30_days_month_set:
        #     days += 30
        # elif i in _31_days_month_set:
        #     days += 31
        # else:
        #     days += 28

    if is_leap_year(year) and month > 2:
        days += 1
    print('这是第{}年的第{}天'.format(year, days))


if __name__ == '__main__':
    main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值