10.数字相关模块与方法
主要内容:
- 小目标:数字相关模块
 - 主要内容:math模块,random模块,decimal模块;
 
1.math模块
math模块主要用于数学计算,例如:开发,三角函数,log函数等;
1.1 导入方式:
Python中非内置模块需要导入,导入基本语法:
import 模块
#from ... import 用于从模块导入指定的属性,类,函数
from 模块 import xxx
math模块导入之后才能使用:
import math
1.2 查看模块相关属性与方法
dir或者help
dir(math)
输出结果, math某块相关属性与支持函数:
['__doc__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'acos',
 'acosh',
 'asin',
 'asinh',
 'atan',
 ...
1.3 常量:
相关属性:
| 属性 | 说明 | 
|---|---|
| pi | 表示圆周率,3.141592653589793 | 
| e | 自然对数的底, 2.718281828459045 | 
1.4 三角函数:
相关函数:
| 函数 | 说明 | 
|---|---|
| sin(x)/cos(x) | 返回的x弧度的正/余弦值 | 
| asin(x)acos(x) | 返回x的反正/反余弦弧度值 | 
| tan(x) | 返回x弧度的正切值 | 
| atan(x) | 返回x的反正切弧度值 | 
两个例子:
import math
#pi/2 正弦值
print(math.sin(math.pi/2))
#pi 余弦值
print(math.cos(math.pi))
结果:
1.0
-1.0
1.5 常用函数:
| 函数 | 说明 | 
|---|---|
| factorial(x) | 计算阶乘,返回x! | 
| sqrt(x) | 返回x的平方根 | 
| floor(x) | 取最接近x的整数,返回整数<x | 
| log(x[, base]) | 以 Base 为底的 x 的对数 | 
| log10(x) | 以10为底的x的对数 | 
| log2(x) | 以2为底的x的对数 | 
几个例子:
print('math.floor(-0.1) =', math.floor(-0.1))
print('math.floor(3.21) =', math.floor(3.1))
print('math.factorial(5)=', math.factorial(5))
print('    math.sqrt(25)=', math.sqrt(25))
print('     math.log2(4)=', math.log2(4))
结果:
math.floor(-0.1) = -1
math.floor(3.21) = 3
math.factorial(5)= 120
    math.sqrt(25)= 5.0
     math.log2(4)= 2.0
对于math模块我们大概了解下即可。
2. random模块
random模块用于产生随机数,导入方式:
import random
2.1 random模块相关方法:
random模块常用的方法:
| 方法 | 说明 | 
|---|---|
| random() | 产生[0,1]之间随机浮点数 | 
| uniform(a,b) | 产生(min(a,b), max(a,b))之间随机浮点数 | 
| randint(a,b) | 产生[a,b] 之间随机整数 | 
| randrange([start], stop, [,step]) | 指定范围内,按step递增的集合中取一个随机数,step缺省值为1 | 
| choice(sequence) | 在序列中随机选取一个元素 | 
| shuffle(x[, random]) | 将列表中元素顺序打乱 | 
| sample(sequence, k) | 在序列中随机选取不重复k个元素,返回列表,k<seq长度 | 
| choices(population, ..., k=1) | 在 给定序列中选取k个元素,返回列表 | 
来个几个例子:
a = 1
b = 20
print(random.random())
print(random.randint(a,b))
print(random.uniform(a,b))
结果:
0.6382030344136873
16
18.40443193784904
2.2 猜数字小游戏:
需求:产生一个1~100之间随机数,用于输入数值,对用户进行友好提示,直到猜中或者‘q’退出。
到了这里,大家可以尝试自己去实现这个题目,不要觉得简单,自己试试看看能不能做到最好。
题目分析:
- 产生随机数x, 范围[1, 100],
 - 循环读取输入,如果是q退出;
 - 如果输入数值不等于x,进行大小提示;
 - 直到猜中退出;
 
使用知识点:
- 输入语句:input;
 - 字符串转整数:int;
 - 循环语句,逻辑语句,break,continue语句;
 
代码实现:
import random
def get_random(a, b):
    return random.randint(a, b)
#猜数字函数,不需要返回值
def guess(x):
    while True:
        #提示用户输入
        n = input('请输入:')
        if n == 'q':
            print('这局不猜了!')
            break
        #字符串转数字,这里必须确保输入是数字
        n = int(n)
        if n > x:
            print('输入太大!')
        elif n < x:
            print('输入太小!')
        else:
            #猜对后退出本次游戏
            print('输入正确:%d!'%x)
            break
x = get_random(1, 10)
guess(x)
测试结果:
请输入:5
输入太大!
请输入:4
输入太大!
请输入:3
输入正确:3!
通过这个练习,希望对杜正朋友解题思路有一定帮助;
3. max/min函数
max/min两个方法:
#找到可迭代对象中最大/最小值
max/min(iterable, *[, default=obj, key=func])
#找到arg1, arg2, args中最大/最小值
min/min(arg1, arg2, *args, *[, key=func])
对于key理解:
key如果指定为函数,则根据函数返回值去最大最小值。
- 基本使用:
获取最大最小值 
max_val = max(1,2,3,4,5,100, -10000)
print('max val:', max_val)
min_val = min(-1,2,3,4,5,100, 10000)
print('min val:', min_val)
结果:
max val: 100
min val: -1
- 改变策略
给定几个数值,取绝对值最大,最小的数;
分析:绝对值函数:abs, 将key指定为abs试试。 
max_val = max(1,2,3,4,5,100, -10000, key=abs)
print('max val:', max_val)
min_val = min(-1,2,3,4,5,100, -10000,key=abs)
print('min val:', min_val)
结果:
max val: -10000
min val: -1
指定key之后,max/min会根据abs的返回值进行比较。
这里我们常将key函数称为回调函数;
- 自定义key函数:
给定数值改变正负号后,取最大最小值;
实现思路:- 定义一个取反函数,
 - 传入一个参数为:x,
 - 返回值为:x*-1
 
 
代码实现:
def func(x):
    return x*-1
max_val = max(1,2,3,4,5,100, -10000, key=func)
print('max val:', max_val)
min_val = min(-1,2,3,4,5,100, -10000,key=func)
print('min val:', min_val)
结果:
max val: -10000
min val: 100
这里我们要理解key的作用,key对应函数的参数与返回值;
总结:
- 了解下math模块中常用的方法,使用的时候能够去查文档;
 - 掌握random随机数模块
 - 掌握max/min函数,重点理解key的作用。
 
文章目录
                            关闭
                        