案例描述:
- 输入某年某月某日,判断这一天是这一年的第几天?
- 例子:
输入的日期为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()