# -*- coding:utf-8 -*-
"""
@author:百草
@file:__init__.py.py
@time:2021/01/26
"""
import random
# 1.random.random():0-1之间的随机小数,不包括0和1
a = random.random()
print(a)
# 2. random.randint(a, b):a-b之间的随机整数,包括a和b
b = random.randint(0, 100)
print(b)
# 3. random.uniform(a, b) a-b的随机浮点数,不包括a和b
c = random.uniform(1, 10)
print(c) # 1.3568464793798622
# 源码:
# def uniform(self, a, b):
# "Get a random number in the range [a, b) or [a, b] depending on rounding."
# return a + (b-a) * self.random()
"""
__all__ =["Random","seed","random","uniform","randint","choice","sample",
"randrange","shuffle","normalvariate","lognormvariate",
"expovariate","vonmisesvariate","gammavariate","triangular",
"gauss","betavariate","paretovariate","weibullvariate",
"getstate","setstate", "getrandbits", "choices",
"SystemRandom"]
"""
# 4.random.randrange(start, stop=None, step=1)
# 从指定范围内,按指定的基数递增或递减的集合中获取一个随机数
# start、stop、step可转为int类型,否则报错ValueError
# 空集合报错:ValueError("empty range for randrange()")
# step转为int后不能为0,否则报错:raise ValueError("zero step for randrange()")
d = random.randrange(start=1, stop=100, step=200)
print(d) # 1
# 5.random.choice(sequence) 从序列中获取一个随机元素
# sequence非空且可以通过下标获取
# 为空则报错: IndexError('Cannot choose from an empty sequence')
# 若无法通过下标获取,则报错:keyError
# li = [1, 2, 3, 'a', 4, 'b']
# li = (1, 2, 3, 'a', 4, 'b')
# li = {1: 2, 3: 'a', 4: 'b'} # 字典类型时,报错:keyError
li = '12345abcd'
e = random.choice(li)
print(e) # a
# 源码:
# def choice(self, seq):
# """Choose a random element from a non-empty sequence."""
# try:
# i = self._randbelow(len(seq))
# except ValueError:
# raise IndexError('Cannot choose from an empty sequence') from None
# return seq[i]
# 6. random.shuffle(x) 将列表中元素随机排列,返回None。x本身被随机排序
# x支持索引,且为可变类型
x = [1, 2, 3, 'a', 4, 'b']
# x = (1,2) # x[i], x[j] = x[j], x[i] TypeError: 'tuple' object does not support item assignment
f = random.shuffle(x)
print(f, x) # None [1, 'a', 2, 4, 'b', 3]
# 7. random.sample(population, k) 从指定序列(population)中随机获取指定长度(k)的片段并随机排列
# 不改变原有序列
# population 支持list\tuple\str,否则保错 TypeError("Population must be a sequence or set. For dicts, use list(d).")
# k, 0<=k<=len(population),否则保错:ValueError("Sample larger than population or is negative")
population = [1, 2, 3, 'a', 4, 'b']
k = 4
g = random.sample(population, k)
print(g) # [2, 3, 4, 'a']
# ==================练习====================
"""
1、生成0-100的随机数
"""
import random
num = random.randint(0, 100) # randint(a,b) 返回a<=x<=b之间的数字
print("生成0-100(包括1和100)之间的随机数是", num)
# 方法2:
num2 = int(random.random() * 100) # 生成0-1(不包括0且不包括1)之间的随机数
print("生成0-100(不包括0和100)之间的随机数是", num2)
"""
2、python 中生成随机整数、随机小数、0-1之间的小数的方法
"""
import random
a = 1
b = 10000
s = random.randint(a, b) # a-b范围内的随机整数
c = random.uniform(a, b) # a-b范围内的随机浮点数
f = random.random() # 0-1之间的小数
print(f'{a}与{b}之间的随机整数:{s}')
print(f'{a}与{b}之间的随机小数:{c}')
print(f"0-1之间的随机小数:{f}")
import numpy
# numpy 主要用于处理矩阵
n = 5 # 生成随机小数的数量
f2 = numpy.random.randn(n) # 生成n个随机小数,list类型返回
print(f"{n}个随机小数:{f2}")
# py3随机数(https://www.cnblogs.com/zhangxinqi/p/9069741.html)