本节课是“判断第几天”的第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()
下图是本实例所用用到的知识点的总结: