本节课是“判断第几天”的第4节课,主要讲字典类型在本实例的应用。

字典类型(dict)“键--值”数据项的组合,每个元素是一个键值对(任何类型都可以作为键)。
如:身份证号(键)--个人信息(值)
字典类型数据通过映射查找数据项。
 映射:通过任意键查找集合中的值的过程。
字典类型以键为索引,一个键对应一个值。
字典类型的数据是无序的。

一、关于字典的操作:
1、初始化一个空的字典:d = dict()
2、字典增加一项值:d[key] = value
3、字典修改一项值:d[key] = new_value
4、字典删除一项值:del d[key]
5、访问字典中某一项:d[key]
6、查看字典所有的项:d
7、查看某一项是否在字典中:key in d  在字典中返回:true;不在字典中返回:false。
8、遍历字典中的key:d.keys()
9、遍历字典中的value:d.values()
10、遍历字典中的所有项:d.items()

d = dict()
d
{}
print(d)
{}
d['egg'] = 2.59
d
{'egg': 2.59}
d['milk'] = 3.51
d['cheese'] = 4.9
d
{'egg': 2.59, 'milk': 3.51, 'cheese': 4.9}
d['egg'] = 10.99
d
{'egg': 10.99, 'milk': 3.51, 'cheese': 4.9}
del d['cheese']
d
{'egg': 10.99, 'milk': 3.51}
'milk' in d
True
'yogurt' in d
False
d.keys()
dict_keys(['egg', 'milk'])
d.values()
dict_values([10.99, 3.51])
d.items()
dict_items([('egg', 10.99), ('milk', 3.51)])

二、利用字典类型判断第几天

"""
    作者:langxingbudui
    版本:4.0
    日期:2019-06-17
    功能:输入某年某月某日,判断这一天是这一年的第几天?
    2.0增加功能:使用列表代替元组
    3.0增加功能:将月份划分为不同的集合再操作
    4.0增加功能:将月份及其对应的天数通过字典表示
"""

from datetime import datetime


def is_leap_year(year):
    """
        判断year是否为闰年
        是,返回True
        否,返回False
    """
    is_leap = False
    if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 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')
    # print(input_date)
    year = input_date.year
    month = input_date.month
    day = input_date.day

    # 月份_天数 字典
    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}

    # 初始化值
    days = 0
    days += day

    for i in range(1, month):
        days += month_day_dict[i]

    if is_leap_year(year) and month > 2:
        days += 1

    print('这是{}年的第{}天'.format(year, days))


if __name__ == '__main__':
    main()

三、思考题:月份和天数是否可以在字典中互换?

    day_month_dict = {30: {4, 6, 9, 11},
                      31: {1, 3, 5, 7, 8, 10, 12}}

思路是按照集合的方法来的,如果大家有更好的思路,请分享,本人虚心学习。

"""
    作者:langxingbudui
    版本:4.0
    日期:2019-07-05
    功能:输入某年某月某日,判断这一天是这一年的第几天?
    2.0增加功能:使用列表代替元组
    3.0增加功能:将月份划分为不同的集合再操作
    4.0增加功能:将月份及其对应的天数通过字典表示
    4.0思考题:将月份和天数在字典中颠倒顺序
"""

from datetime import datetime


def is_leap_year(year):
    """
        判断year是否为闰年
        是,返回True
        否,返回False
    """
    is_leap = False
    if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 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')
    # print(input_date)
    year = input_date.year
    month = input_date.month
    day = input_date.day

    """
    # 月份_天数 字典
    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 = {30: {4, 6, 9, 11},
                      31: {1, 3, 5, 7, 8, 10, 12}}

    # 初始化值
    days = 0
    days += day

    for i in range(1, month):
        if i in day_month_dict[30]:
            days += 30
        elif i in day_month_dict[31]:
            days += 31
        else:
            days += 28
    if is_leap_year(year) and month > 2:
        days += 1

    print('这是{}年的第{}天'.format(year, days))


if __name__ == '__main__':
    main()

下图是本实例所用用到的知识点的总结:

python 判断时间是否是昨天 python判断第几天_列表