# random-随机数库

# random方法

import random

a = random.random()

random()方法可以生成一个大于0小于1的浮点随机数位数可能很长
通常使用round()方法来控制浮点数长度

round(n,ndigits=x)为其调用方法,n为数据,ndigits为位数
round()方法遵循四舍五入原则好用多了

python使用模块前,需要先使用import关键字声明

# randint方法

import random

a = random.randint(0,10)
print(a) # 0-10随机数

randint(s,e)方法可以生成一个s-e区间内的随机整数

randint()含头含尾,会生成头数和尾数

由于bool类型是int的子类,所以randint(0,1)相当于50%概率为真,可以直接用在条件中,不需要==

# uniform方法

import random

a = random.uniform(0,10)
print(a) # 0-10随机浮点数

uniform()相当于一个带参数的random()方法

uniform()的位数更离谱长,务必使用round()进行处理

# randrange方法

import random

a = random.randrange(0,10,2)
print(a) # 0-10的随机偶数

randrange()方法生成随机递增序列里的一个数,这个数一定是起始位+步长的倍数
看不懂?让我们等量代换一下:

import random

l = list(range(0,10,2))
print(random.choice(l)) # 随机从列表里选择一个数据,后面会讲到

这段代码与上面的结果是一致的,它的流程就是:

  1. 生成一个符合输入参数的列表
  2. 从列表里随机选择一个数
  3. 返回这个数

这里还有一个拆分更彻底的版本:

import random

# 根据输入参数生成列表
l = []
for i in range(0, 10, 2):
    l.append(i)

# 随机选择元素
index = random.randint(0, len(l) - 1)
print(l[index]) # 返回(输出)此元素

# shuffle和sample方法

import random
l = [1,2,3,4,5]
random.shuffle(l)
print(l)
l = [1,2,3,4,5]
r = random.sample(l,5)
print(r)

shuffle(seq)sample(seq,k=len(seq))都可以随机打乱列表
但shuffle是在原列表上做操作,而sample则是返回一个新列表
sample(seq,k=n<len(seq)则可以从列表中随机提取长度为n的片段(不连续)

# choice和choices方法

import random

l = [1,2,3,4,5]
r = random.choice(l)
print(r)
r1 = random.choices(l,k=3)
print(r1)

choice(seq)方法可以从列表中返回一个随机元素
choices(seq,k=n)方法可以从列表中返回k个随机元素

# string-字符串模块

string.ascii_letters从字母a-Z的字符串
string.ascii_lowercase从字母a-z的字符串
string.ascii_uppercase从字母A-Z的字符串
string.digits所有十进制常数
string.punctuation所有在ASCII环境下被C认为标点的字符串

# time-时间模块

仅包含及其常用的方法,并不完整

# struct_time格式

struct_time是time模块返回的常见序列,索引见下表:

索引 属性
0 tm_year(年) 比如2022
1 tm_mon(月) 1-12
2 tm_mday(日) 1-31
3 tm_hour(时) 0-23(转换请+1)
4 tm_min(分) 0-59(同上)
5 tm_sec(秒) 0-61
6 tm_wday(周几) 0-6(0表周日,需要+1)
7 tm_yday(一年中的第几天) 1-366
8 tm_isdst(是否是夏令时) 默认为-1

# localtime和gmtime方法

import time

t = time.localtime() #返回一个struct_time对象
print(t) 
utc = time.gmtime() #返回一个struct_time对象
print(utc) 

这两个方法都会将输入的时间戳转换为struct_time对象,不输入则使用现在的时间戳
区别:localtime使用你所在的时区,gmtime使用UTC标准时间(+0.00)
附带一个mktime方法,它可以将struct_time对象转换回时间戳

# time和time_ns方法

import time

t = time.time()
print(t)

time()返回现在的时间戳
time_ns()也是返回现在的时间戳,但是是int对象,不可以传入localtime作为参数

time模块比较复杂,建议查看官方文档

# 练习题

1.输入一个时间戳,返回它的年、月、日、时、分、秒(当前时区),
不输入则使用现在的时间戳,样例输出/入如下:
[输入]没有输入任何东西
[输出]2022年1月16日16时7分30秒(此时时间)

import time

u = input("请输入时间戳:")
if u == "":
    u = time.time()
else:
    u = int(u)
t = time.localtime(u)
print(f"{t[0]}{t[1]}{t[2]}{t[3]}{t[4]}{t[5]}秒")

2.输入一串数据,判断它转换为int类型是否会报错,
可以则输出可以转换为int类型并返回这个数
不可以则输出不可以转换为int类型并返回这个字符串可以转换的部分
样例输入/出:
第一组数据:
[输入]123456
[输出]可以转换为int类型
[输出]123456
第二组数据:
[输入]a123b456
[输出]不可以转换为int类型
[输出]123456

import string
u = input("输入数据:")
t = ""
can_int = True
for i in u:
    if i in string.digits:
        t += i
    else:
        can_int = False
if can_int:
    print("可以转换为int类型")
else:
    print("不可以转换为int类型")
print(t)