Think Python Exercise 16.2

datetime 模块提供的 time 对象,和本章的 Time 对象类似, 但前者提供了更丰富的方法和操作符。

  1. 使用 datetime 模块来编写一个程序,获取当前日期并打印当天是周几。
  2. 编写一个程序,接受一个生日作为输入,并打印用户的年龄以及距离下个生日所需要的天数、小时数、分钟数和秒数。
  3. 对于两个不在同一天出生的人来说,总有一天,一个人的出生天数是另一个人的两倍。我们把这一天称为 ‘‘双倍日’’。编写一个程序,接受两个不同的出生日期, 并计算他们的 ‘‘双倍日’’。
  4. 再增加点挑战,编写一个更通用的版本,用于计算一个人出生天数是另一个人 n 倍的日子。

题1

1
2
3
4
5
6
7
from datetime import date

today = date.today()

#print(dir(today)) #打印属性、方法列表

print("今天是星期%d." % (today.weekday()+1)) # weekday返回的值是从0开始的,所以+1

题2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from datetime import datetime

def days_until_birthday(birthday):
    """距离下一次生日还有多长时间"""
    
    today = datetime.today()
    next_birthday = datetime(today.year, birthday.month, birthday.day)
    
    if today > next_birthday:
        next_birthday = datetime(today.year+1, birthday.month, birthday.day)
        
    delta = next_birthday - today
    return delta.days


today = datetime.today()

print(today.strftime('%A')) #星期几

birthday = datetime(1999,5,10)

print(days_until_birthday(birthday))

题3和题4

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from datetime import datetime

def double_day(b1,b2):
    """计算,什么时候一个人的出生天数是另外一个人的两倍"""
    if b1 > b2:
        delta = b1 - b2
        dday = b1 + delta
        return dday
    elif b2 > b1:
        delta = b2 - b1
        dday = b2 + delta
        return dday
    else:
        return False
    
def ntimes_day(b1,b2,n):
    """计算,什么时候一个人的出生天数是另外一个人的n倍"""
    if b1 > b2:
        delta = b1 - b2
        dday = b1 + (n-1)*delta
        return dday
    elif b2 > b1:
        delta = b2 - b1
        dday = b2 + (n-1)*delta
        return dday
    else:
        return False

b1 = datetime(1999,5,10)
b2 = datetime(2003,5,16)

print('两倍:',double_day(b1,b2))

print('6倍: ',ntimes_day(b1,b2,6))