【Python打卡2019】20190430之根据日期判断为当年哪一天-字典使用

0.任务分析与描述

此前的实现当中,我们都使用的是普通的元素集合,将月份和天数分开存储;
我们在Java中经常使用map类型进行键值对的存储,键值对能够满足将月份和天数一一对应的需求;
在Python中,我们可以通过字典来实现。

1.字典
  • 字典可以通过dict()函数创建,也可以直接使用{};
  • 字典中的元素无序,其中的元素为键值对形式(创建时逗号隔开两个键值对,冒号隔开键与值);
  • 添加元素直接赋值,如d[1]=2;则d中为{1:2}
  • 删除元素用del d[key];取出元素使用d[key]即可;
  • 字典其他用法可以参考我室友的博客:https://blog.csdn.net/MessiNine/article/details/80443442
2.程序与结果
"""
    判断输入日期为当前年份的第几天
    用列表代替元组
    +用集合set取代列表
    +使用字典取代set
"""
from datetime import datetime


def is_leap_year(year):
    return (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)


def cal_which_day(date_str):
    input_date = datetime.strptime(date_str, "%Y/%m/%d")
    year = input_date.year
    month = input_date.month
    day = input_date.day

    # _31_days_month_set = {1, 3, 5, 7, 8, 10, 12}  # 大括号直接创建集合
    # _30_days_month_set = {4, 6, 9, 11}
    # 用字典代替集合,因为字典可以存储键值对,刚好可以将月份与其天数对应起来
    month_days_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}

    total_month_days = 0

    # 这样的话,我们看一从1月计算到month月来进行天数的计算
    for i in range(1, month):  # range(1, n)表示从1月到month-1月,正好满足我们的需要
        total_month_days += month_days_dict[i]

    if is_leap_year(year) and month > 2:  # 如果是闰年,且大于2月,+1
        total_month_days += 1

    total_days = total_month_days + day

    return total_days


def main():
    input_date_str = input("请输入日期(yyyy/mm/dd):")
    which_day = cal_which_day(input_date_str)
    print("{}是当年的第{}天~(字典取代集合)".format(input_date_str, which_day))


if __name__ == '__main__':
    main()
Y:\Python\Anaconda\python.exe Y:/PythonWorkspace/lect06/WhichDay4.py
请输入日期(yyyy/mm/dd):2016/04/30
2016/04/30是当年的第121天~(字典取代集合)

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值