标准库calendar、random

本文深入探讨Python的Calendar和Random模块,详细介绍了如何使用Calendar模块处理日期和日历相关功能,以及Random模块生成随机数的方法。从设置一周的第一天到判断闰年,再到生成各类随机数,本文提供了丰富的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

calendar模块主要由Calendar类与一些模块方法构成,Calendar类又衍生了一些子孙类来帮助我们实现一些特殊的功能。

Calendar模块

一、概述

Calendar类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
calendar模块允许输出类似Unix cal程序的日历,并提供与日历相关的其他有用功能。默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天。不过,我们可以使用setfirstweekday()方法来设置一周的第一天为星期日或者其他工作日,指定的日期以整数形式给出。

二、Calendar库的使用

调用方法:import calendar

  • setfirstweekday(firstweekday): 指定一周的第一天,0是星期一,…,6为星期日
import calendar
# 将星期日设置为一周第一天
calendar.setfirstweekday(firstweekday=6)
  • firstweekday(): 返回一周的第一天,0是星期一,…,6为星期日
import calendar
# 将星期日设置为一周第一天
>>>calendar.setfirstweekday(firstweekday=6)
>>>print(calendar.firstweekday())      
6
  • prcal(year, w=0, l=0, c=6, m=3): 打印一年的日历,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列
import calendar
>>>calendar.setfirstweekday(firstweekday=6)
>>>calendar.prcal(2019, m=4)

#结果:
                                               2019

      January                   February                   March                     April
Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa
       1  2  3  4  5                      1  2                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28            24 25 26 27 28 29 30      28 29 30
                                                    31

        May                       June                      July                     August
Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa
          1  2  3  4                         1          1  2  3  4  5  6                   1  2  3
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30 31
                          30

     September                  October                   November                  December
Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7             1  2  3  4  5                      1  2       1  2  3  4  5  6  7
 8  9 10 11 12 13 14       6  7  8  9 10 11 12       3  4  5  6  7  8  9       8  9 10 11 12 13 14
15 16 17 18 19 20 21      13 14 15 16 17 18 19      10 11 12 13 14 15 16      15 16 17 18 19 20 21
22 23 24 25 26 27 28      20 21 22 23 24 25 26      17 18 19 20 21 22 23      22 23 24 25 26 27 28
29 30                     27 28 29 30 31            24 25 26 27 28 29 30      29 30 31

  • isleap(year): 判断指定是否是闰年,闰年为True,平年为False
import calendar
 # 2019年是平年,所以为False 
 >>>print(calendar.isleap(2019)) 
 False 
 
 # 2008年是闰年,所以为True 
 >>>print(calendar.isleap(2008)) 
 True
  • leapdays(y1, y2): 返回y1y2年份之间的闰年数量,y1与y2皆为年份。包括起始年,不包括结束年
import calendar
# 2008到2011之间只有2008年是闰年,所以数量为1
>>>print(calendar.leapdays(2008, 2011))    
1
  • weekday(year, month, day): 获取指定日期为星期几
import calendar
# 2019-6-6是星期四,千万别忘记3代表的是星期四
>>>print(calendar.weekday(2019, 6, 6))     
3
  • weekheader(n): 返回包含星期的英文缩写,n表示英文缩写所占的宽度
>>>import calendar
>>>print(calendar.weekheader(4))

Mon  Tue  Wed  Thu  Fri  Sat  Sun 
  • monthrange(year, month): 返回一个由一个月第一个天的星期与当前月的天数组成的元组
import calendar
# 查看日历可以知道,06-01是星期六,并且6月共30天
>>>print(calendar.monthrange(2019,6))   
(5, 30)
  • monthcalendar(year, month): 返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期
import calendar
>>>calendar.setfirstweekday(firstweekday=6)
>>>print(calendar.monthcalendar(2019, 6))

#结果:
[[0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0]]
  • prmonth(theyear, themonth, w=0, l=0): 打印一个月的日历,theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行
import calendar
>>>calendar.setfirstweekday(firstweekday=6)
>>>calendar.prmonth(2019, 6)

#结果:
     June 2019
Su Mo Tu We Th Fr Sa
                   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

  • month(theyear, themonth, w=0, l=0): 返回一个月的日历的多行文本字符串。theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行
import calendar
>>>calendar.setfirstweekday(firstweekday=6)
>>>print(calendar.month(2019, 6))

#结果:
     June 2019
Su Mo Tu We Th Fr Sa
                   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

  • **calendar(year, w=2, l=1, c=6, m=3):**以多行字符串形式返回一年的日历,w每个单元格宽度,默认2,内部已做处理,最小宽度为2,l每列换l行,默认为1,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列
import calendar
>>>calendar.setfirstweekday(firstweekday=6)
>>>print(calendar.calendar(2019, m=4))

#结果:
                                               2019

      January                   February                   March                     April
Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa
       1  2  3  4  5                      1  2                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28            24 25 26 27 28 29 30      28 29 30
                                                    31

        May                       June                      July                     August
Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa
          1  2  3  4                         1          1  2  3  4  5  6                   1  2  3
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30 31
                          30

     September                  October                   November                  December
Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7             1  2  3  4  5                      1  2       1  2  3  4  5  6  7
 8  9 10 11 12 13 14       6  7  8  9 10 11 12       3  4  5  6  7  8  9       8  9 10 11 12 13 14
15 16 17 18 19 20 21      13 14 15 16 17 18 19      10 11 12 13 14 15 16      15 16 17 18 19 20 21
22 23 24 25 26 27 28      20 21 22 23 24 25 26      17 18 19 20 21 22 23      22 23 24 25 26 27 28
29 30                     27 28 29 30 31            24 25 26 27 28 29 30      29 30 31


random模块

一、概述

random库是使用随机数的python标准库,主要用来生成随机数

  • 主要用于产生各种分布的伪随机序列

  • 采用梅森旋转算法生成伪随机数序列

  • random引用:

import random

基本随机函数:seed() 、 random()

扩展随机函数:randint()、 getrandbits()、 uniform()、 randrange()、 choice() shuffle()

二、random库的使用

基本随机函数

  • seed() 初始化给定的随机数种子,默认为当前系统时间
random.seed(10)
  • random() 生成一个[0.0, 1.0)之间的随机小数
>>> random.random()
0.5714025946899135

>>> random.random()
0.4288890546751146

>>> random.seed(10)
>>> random.random()
0.5714025946899135

>>> random.random()
0.4288890546751146

扩展随机函数

  • randint(a,b) 生成一个[a, b]之间的整数
>>> random.randint(10,100)
83
  • uniform(a,b) 生成一个[a, b]之间的随机小数
>>> random.uniform(1,10)
4.195735189575358
  • randrange(m,n[,k]) 生成一个[m, n)之间以k为步长的随机整数
>>> random.randrange(1,151,3)
1
>>> random.randrange(1,151,3)
40
  • getrandbits(k) 生成一个k比特长的随机整数
>>> random.getrandbits(16)
32197
  • choice(seq) 从序列seq中随机选择一个元素
>>> random.choice('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~')
'_'
  • shuffle(seq) 将序列seq中元素随机排列,返回打乱后的序列
>>> s = [1,2,3,4,5,6,7,8,9,0]
>>> random.shuffle(s)
>>> print(s)
[4, 7, 1, 9, 3, 6, 2, 8, 0, 5]

参考地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值