- images
- results
- .gitignore
- 1.1概论.ipynb
- 1.2 环境配置.pdf
- 1.3数据类型.ipynb
- 1.4 人机交互.ipynb
- 1.5 对象与变量.ipynb
- 1.6 编码与命名规范.ipynb
- 2.1 数值类型.ipynb
- 2.2 数值类型转换.ipynb
- 2.3 数值元算.ipynb
- 2.4常用数学运算函数.ipynb
- 2.5 math 模块及其应用.ipynb
- 2.6.1 逻辑值测试.ipynb
- 2.6.2 成员运算.ipynb
- 2.6.3 比较运算.ipynb
- 2.6.4 布尔运算.ipynb
- 2.6.5 运算优先级.ipynb
- 2.ipynb
- 3.1 流程控制结构.ipynb
- 3.3.1 for 循环语句.ipynb
- 3.3.3 rang.ipynb
- 3.3.3 while 循环语句.ipynb
- 3.4 and 3.5 分支结构和条件.ipynb
- 3.6 and 3.7 .ipynb
- 3.9 异常处理.ipynb
- 4 函数和模块化编程.ipynb
- 4.1 函数的定义、调用与返回值.ipynb
- 4.2 函数的参数传递.ipynb
- 4.3 变量的作用域.ipynb
- 4.4 匿名函数.ipynb
- 4.5 递归.ipynb
- 4.6 内置函数.ipynb
- 4.7 模块化程序设计.ipynb
- 5.1 序列通用操作.ipynb
- 5.1.1 索引.ipynb
- 5.1.2 切片.ipynb
- 5.1.3 序列拼接与重复.ipynb
- 5.1.4 成员测试.ipynb
- 5.2.1 字符串的创建.ipynb
- 5.2.2 字符串常量.ipynb
- 5.2.4 字符串的遍历.ipynb
- 5.2.5 文件遍历.ipynb
- 5.2.6 字符串的处理方法.ipynb
- 5.2.7 字符串格式化.ipynb
- 5.2.8 转义字符.ipynb
- 5.3 random 模块及其应用.ipynb
- 6.1 元组.ipynb
- 6.2 列表.ipynb
- 6.2.1 列表的创建.ipynb
- 6.2.2 列表的更新.ipynb
- 6.2.3 列表的删除.ipynb
- 6.2.4 列表的排序.ipynb
- 6.2.5 列表赋值与复制.ipynb
- 6.2.6 列表推导式.ipynb
- 6.2.8 常用内置函数.ipynb
- 6.2.9 列表嵌套及其排序.ipynb
- 6.3 列表综合应用.ipynb
- 7.1.1 集合的创建.ipynb
- 7.1.2可变集合类型的操作.ipynb
- 7.1.3 成员关系.ipynb
- 7.1.4 集合关系.ipynb
- 7.1.5 集合运算.ipynb
- 7.2.1 字典创建.ipynb
- 7.2.2 获取字典值.ipynb
- 7.2.3 修改字典值.ipynb
- 7.2.4内置函数与方法.ipynb
- 7.2.5字典排序输出.ipynb
- 7.3 集合与字典的应用.ipynb
- 8 中 numpy 概述.ipynb
- 8 中panda 库.ipynb
- 8.1 文件的打开与关闭.ipynb
- 8.2 文件读写操作.ipynb
- 8.3 文件的应用.ipynb
- 8.4 numpy 文件操作.ipynb
- 8.4.2 and 3.ipynb
- 8.5.1 pandas文件读写.ipynb
- 8.5.2 and 3 and 4.ipynb
- 9.1 matplotlib 线性图.ipynb
- 9.1.5 数据文化绘图.ipynb
- 9.2 非线性图.ipynb
- 9.3 词云.ipynb
- _overview.md
- _readme.ipynb
- coding_here.ipynb
- dream.png
- score.txt
- score_total.csv
- 成绩分析综合.json
2.ipynb @master — view markup · raw · history · blame
第 2 章 数值类型¶
教学目的和要求¶
- 掌握三种数值类型
- 掌握数值类型的方法与类型转换
- 掌握数值运算
- 常用数值运
- math模块 用 其应用
重点难点¶
重点:
- 整型、浮点型的应用与类型转换
- 数学运算函数
难点:
- 数据类型转换
- 表达式与运算优先级
教学安排¶
预习及预习检验(25分钟)¶
- 本章数字教程 5分钟
- 阅读教材 5分钟
- 数值类型翻转教学设计 15分钟
课堂教学(2学时共90分钟)¶
复习: (2分钟)
- 输入函数的接收到的只能是字符串类型
- 字符串不能参与数值运算
- 引出数值类型转换
讲授:
- 数值类型及其转换函数(15分钟)
整型int()
浮点型float()
复数类型complex() - 赋值运算(3分钟)
- 数值运算(10分钟)
- 常用数值运算函数(15分钟)
- 数值计算案例教学(15分钟)
- math库(20分钟)
- 常用运算(20分钟)
本章小节¶
- 所有客观对象都要抽象成数据,才能在计算机中进行存储和处理
- 参与数值运算的对象必须转为数值类型,主要是应用int()和float()函数转为整型或浮点类型
- 数据类型、运算符和表达式是程序设计的基本概念,必须熟练运用
- math库中的函数不需要背记,可依赖IDE的提示使用
- 常用运算要注意运算的优先级
作业¶
Python第二章作业(初级)(7关约30-90分钟)
实验项目(建议90分钟)¶
- 矩形面积运算(project)(6关约20分钟)
- 地球数据计算闯关(project)(5关约20分钟)
- 计算弓形的面积(project)(2关约10分钟)
- 计算几何形状的表面积与体积(project)(7关约20分钟)
- 学费计算(project)(2关约10分钟)
- 弧田术(project)(6关约20分钟)
备注¶
- 演示编写程序,强调输入的数据必须转数值型才能参与数值运算
- math库不用多讲,了解会用即可
- 常用运算中可放在本章讲也可放到下一章讲
问题总结¶
- eval()函数效率不高且存在安全性问题,建议学生不要滥用
- 明确根据要求转整型或浮点型
- 复杂数值公式转表达式可重点讲一下
- 本章部分内容可采取翻转教学,由学生课上完成翻转教学项目,培养学生自学能力。
本章教学内容案例¶
2.1 数值类型¶
整数(int)
浮点数(float)
复数(complex)
2.1.1 整数(int)¶
整数常被称为整型或整数类型
不包含小数点的数字
十进制: 0 、123、-45
二进制:0b1101、0B1100
八进制:0o17、0O777
十六进制:0xff、0X123456789ABCDEF
整数特点
大小无限制,可精确表示超大数
import math # 导入 math 库
# 计算100的阶乘,158位整数
print(math.factorial(100))
输出: 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
整数子类--bool值
True和False
以整数“1”和“0”为值参与数值运算
print(False + 2) # 2
print(True * 2 + 3) # 5
print((67 > 60) * 5 + 8) # 13
2.1.2 浮点数(float, 实数)¶
十进制表示 由整数部分、小数点与小数部分组成
123.45、23.0、0.78、 12. (12.0)、.15 (0.15)
科学记数法表示 e
0.48e-5、2e3、2.53e3 2.53e3(2.53 × 103 = 2530.0) 等价于a×10n
浮点数无法保证完全精确,输出时只保留17位有效数字
print(43.02 * 7)
预期输出:301.14 实际结果:301.14000000000004
print(5.02 / 0.1)
预期输出:50.20 实际结果:50.199999999999996
浮点数表示的数字最大值约为1.7× 10308
print(pow(809.0, 106)) # 输出809的106次幂的值
# 输出 1.748007496839708e+308
print(pow(810.0, 106)) # 输出810的106次幂的值
# OverflowError: (34, 'Result too large')
2.1.3 复数¶
由实数部分和虚数部分构成
实部虚部都是浮点数
用a + bj 或 complex(a, b)表示
print((3.0 + 4.0j).real) # 输出实部 3.0
print((3.0 + 4j).imag) # 输出虚部 4.0
print(abs(3.0 + 4.0j)) # 输出复数的模 5.0
2.2 数值类型转换¶
side = input() # 输入 '5'
perimeter = side * 4 # 等价于 '5' * 4
print(perimeter) # 输出 '5555'
2.2.1 字符串转整数 (int)¶
int('x') 可将整数字符串'x'转为整数 x
输入整数,表示正方形的边长, 计算并输出其周长¶
side = input() # 输入'5'
perimeter = int(side) * 4 # 字符串转整数 (int),变成数值 5 * 4
print(perimeter) # 输出 20
输入整数,表示正方形的边长, 计算并输出其周长¶
side = int(input()) # 输入'5',字符串转整数 (int),int('x') 可将整数字符串'5'转为整数 5
perimeter = side * 4 # 相当于5 * 4
print(perimeter) # 输出20
int('x') 可将整数字符串'x'转为整数 x,无法将浮点数字符串转为整数¶
side = int(input()) # 输入浮点数,表示正方形的边长, 计算并输出其周长,输入'3.5'
# int() 无法将浮点数字符串转为整数
perimeter = side * 4
print(perimeter)
# ValueError: invalid literal for int() with base 10: '3.5'
2.2.1 字符串转浮点数 (float)¶
float('x') 可将浮点数字符串'x'转为浮点数 x
float('x') 可将整数'x'转为浮点数 x
输入浮点数,表示正方形的边长, 计算并输出其周长
side = float(input()) # float('x')可将浮点数字符串'x'转为浮点数 x,输入3.5
perimeter = side * 4 # 3.5 * 4
print(perimeter) # 输出 14.0
side = float(input()) # float('x')可将整数字符串'x'转为浮点数 x.0,输入 3
perimeter = side * 4 # 3.0 * 4
print(perimeter) # 输出 12.0
eval('x')可将整数字符串'x'转为整数 x
eval('x')可将浮点数字符串'x'转为浮点数 x
side = eval(input()) # eval('x')可将整数字符串'x'转为整数 x,输入3 perimeter = side 4 # 3 4 print(perimeter) # 12
side = eval(input()) # eval('x')可将浮点数字符串'x'转为浮点数 x,输入3.0
perimeter = side * 4 # 3.0 * 4
print(perimeter) # 12.0
float('x')去除字符串开头和结尾的空白字符, 包括:空格、\n、\t 等
print(float(3)) # 输出 0.678
print(float(' 0.678\n')) # 输出 3.0
int('x')去除字符串开头和结尾的空白字符, 包括:空格、\n、\t 等
int(x.b)可截取浮点数x.b的整数部分 x
print(int(3.99)) # 输出 3
print(int(' 678\n')) # 输出 678
int('x', base=10))将其他进制字符串转为十进制整数
base 为整数,此参数缺省时为十进制
其他进制字符串转整数 (int)
print(int('20')) # 输出 20
print(int('20', base=10)) # 输出 20
print(int('20', 10)) # 输出 20
其他进制字符串转整数 (int)
int('x', base=10) )
2、8、10、16代表二进制、八进制、十进制和十六进制
print(int('11111111', base=2)) # 输出 255
print(int('11111111', 2)) # 输出 255
print(int('17', 8)) # 输出 15
print(int('FF', 16) ) # 输出 255
实例 2.1 计算矩形面积
矩形的面积等于其长与宽的乘积,用户输入长和宽的值,按输入要求编程计算矩形的面积,输入要求如下:
(1) 输入两个正整数,输出结果为整数int()
(2) 输入两个浮点数,输出结果为浮点数float()
(3) 输入两个正数,要求输出的数据类型与输入的数据类型保持一致eval()
输入:输入长和宽的数值
处理:利用短形面积公式计算面积
输出:输出面积
# 输入整数表示的矩形的长和宽, 计算并输出矩形的面积
width = int(input()) # 用int()函数将输入转成整数,例如输入:3
length = int(input()) # 用int()函数将输入转成整数,例如输入:4
area = width * length # 利用面积公式计算面积
print(area) # 输出:12
# 输入浮点数表示的矩形的长和宽, 计算并输出矩形的面积
width = float(input()) # float()转成浮点数,输入:2.456
length = float(input()) # float()转成浮点数,输入:3.58
area = width * length # 计算面积
print(area) # 输出:8.79248
print(round(area, 2)) # 保留2位小数,输出:8.79
# 输入两个正数,要求输出的数据类型与输入的数据类型保持一致eval(), 计算并输出矩形的面积
width = eval(input()) # 用eval()函数将输入转成数值型
length = eval(input()) # 用eval()函数将输入转成数值型
area = width * length # 利用面积公式计算面积
print(area)
# 输入3,4时,输出:12;
# 输入3.0,4.0时,输出12.0
数值运算
数学运算符:+、 -、 、 /、 //、 %、 ** a = 8b = 5print(a + b) # 结果为 13print(a - b) # 结果为 3print(a b) # 结果为 40print(a / b) # 精确除法,浮点数1.6print(a ** b) # a 的 b 次幂,32768 加、减、乘、除、整除、取模、 幂
x1 = -b + b 2 - 4 a c 0.5 2 a x2 = -b - b 2 - 4 a c 0.5 2 a
数学运算符:+、 -、 *、 /、 //、 %、 ** 数学公式: 表达式:
整除(//): 整除,结果为整数,向下取整算法
当有浮点数参与运算的时候,结果为浮点型的整数
print(11 // 4) print(99 // 10) print(99.0 // 10)
9 2.75 print(-11 // 4) -2.75 9.0 2 -3 除(/): 除法,结果为浮点数 print(11 / 4) 2.75
取模(%): 两个数整除的余数
模非零时,其符号与除数相同
a % b = a - (a // b) * b
判断整除
判断奇偶
a % 4 == 0 and a % 100 != 0
a % 2 == 0
使结果落在某区间 a % 7 a % 26 结果: 0, 1, 2, 3, 4, 5, 6 结果: 0, 1, 2……24, 25
幂(): 两个星号表示幂运算 a b
print((1 / 2) ** 2)
print(3 2) print(3 (1 / 2)) print((-4) (1 / 2)) 9 1.732 0.25 (1.2246467991473532e-16+2j) a b 中 b 小于 1 时为开方,负数开偶次方结果为复数
实例 2.2 一元二次方程求解 现有一元二次方程:ax2 + bx + c = 0,当a,b,c的值分别为5,8,3时,编程求其实根。 a, b, c = 5, 8, 3 # 同步赋值,5,8,3分别赋值给a,b,cx1 = (-b + (b b - 4 a c) ** (1 / 2)) / (2 a)x2 = (-b - (b b - 4 a c) ** (1 / 2)) / (2 a)# x2 = (-b - (b 2 - 4 a c) 0.5) / (2 a)print(x1,x2) # 在一行内输出-0.6 -1.0,输出结果用空格分隔 此题中,判别式b2-4ac= 8 8 – 4 5 3 = 4 > 0 该方程有两个不相等的实数解 可利用一元二次方程的求根公式进行计算
实例 2.2 一元二次方程求解 现有一元二次方程:ax2 + bx + c = 0,当a,b,c的值分别为5,8,3时,编程求其实根。 a, b, c = eval(input())if b b - 4 a c > 0: x1 = (-b + (b b - 4 a c) (1 / 2)) / (2 a) x2 = (-b - (b b - 4 a c) 0.5) / (2 * a) print(x1, x2) a,b,c的值由用户在一行内输入的3个逗号分隔的数字
实例 2.2 一元二次方程求解 现有一元二次方程:ax2 + bx + c = 0,当a,b,c的值分别为5,8,3时,编程求其实根。 a, b, c = eval(input())if b b - 4 a c > 0: x1 = (-b + (b b - 4 a c) (1 / 2)) / (2 a) x2 = (-b - (b b - 4 a c) 0.5) / (2 a) print(x1, x2)elif b b - 4 a c == 0: print(-b / (2 a))else: x1 = (-b + (b b - 4 a c) (1 / 2)) / (2 a) x2 = (-b - (b b - 4 a c) 0.5) / (2 * a) print(x1, x2)
常用数学运算函数
绝对值abs(x) print(abs(-3)) 3 print(abs(-3.45)) 3.45 print(abs(3 + 4j)) 5.0 x 为整数或浮点数时返回其绝对值 x 为复数时返回复数的模
返回 x的y次幂
print(pow(2, 3)) 8
print(pow(2, 1/2)) 1.4142135623730951
print(pow(-2, 1/2))
print(pow(1999, 1998, 1997)) 4
幂 pow(x, y)
(8.659560562354934e-17+1.4142135623730951j)
x 的 y 次幂计算结果再对z 取模,效率高
pow(x, y[, z])
1999 ** 1998 % 1997
max(arg1,arg2,…) 从多个参数中返回其最大值 print(max(80, 100, 1000)) 1000 max(iterable) 从一个可迭代对象中返回其最大值 print(max([49, 25, 88])) 88 最大值 max()
min(arg1,arg2,…) 从多个参数中返回其最小值 print(min(80, 100, 1000)) 80 min(iterable) 从一个可迭代对象中返回其最小值 print(min((49, 25, 88))) 25 最小值 min()
sum(iterable) print(sum(range(11))) 55 print(sum([1, 2, 3, 4])) 10 将元素为数值的可迭代对象中的元素累加 加和 sum()
print(sum(range(11), start=10)) 65 print(sum([1, 2, 3, 4], 10)) 20 将元素为数值的可迭代对象中的元素累加到start上 sum(iterable, start=0) 加和 sum()
round(number, n)浮点数number保留n 位小数最短表示
print(round(3.14)) 3
print(round(3.84)) 4
print(round(3.125001, 2)) 3.13
print(round(3.125, 2)) 3.12
print(round(3.115, 2)) 3.12
四舍
print(round(3.84, 1)) 3.8
print(round(3.86, 1)) 3.9
五后非零就进一
五前为偶应舍去
五前为奇要进一
六入
五考虑
结果小数部分的末位为0 或n 超过小数位数时,返回该数的最短表示 print(round(3.0000, 2)) 期望输出3.00 print(round(3.14, 4)) 期望输出3.1400 实际输出其浮点数的最短表示3.0 实际输出3.14
多数浮点数无法精确转为二进制,会导致部分数字取舍与期望不符
print(round(3.1425, 3))
import decimalprint(decimal.Decimal(2.675))print(decimal.Decimal(3.1425))
2.674999999999999822364316059974953532218933105468753.1425000000000000710542735760100185871124267578125
print(round(2.675, 2))
3.142
2.68
3.143
2.67
Math模块及应用
import math 导入 math 模块,引用时函数名前要加 'math.' https://docs.python.org/3/library/math.html
print(math.pi) # pi为圆周率常量3.141592653589793 print(math.sqrt(2)) # sqrt为开平方函数 1.4142135623730951
from math import pi,sqrt 导入math中的常数pi和sqrt()函数或全部函数 from math import * print(pi)
3.141592653589793 print(sqrt(2)) 1.4142135623730951
math 数论与表示函数 24 个 幂与对数函数 8 个 三角函数 9 个 双曲函数 6 个 角度转换函数 2 个 特殊函数 4 个 常量 5 个 https://docs.python.org/zh-cn/3.9/library/math.html
math.fabs(x) 以浮点数形式返回x的绝对值 import math print(math.fabs(-6)) # 6.0
from math import fabs print(fabs(-6)) # 6.0 math.fabs(x) 以浮点数形式返回x的绝对值
math.factorial(x):返回x的阶乘 print(math.factorial(6)) 720 要求x为非负整数,x为负数或浮点数时返回错误 print(math.factorial(-6)) ValueError: factorial() not defined for negative values print(math.factorial(6.5)) ValueError: factorial() only accepts integral values
math.fsum()
返回浮点数迭代求和的精确值
print(sum([.1, .1,.1, .1, .1, .1, .1, .1, .1, .1, .1]))
1.0999999999999999
import math
print(math.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])) 1.0
math.gcd(*integers) 返回给定的整数参数的最大公约数 print(math.gcd(88, 44, 22)) 22 返回值是能同时整除所有参数的最大正整数 print(math.gcd(88, 44, 0)) 44 如果所有参数为零或无参数,则返回值为0 print(math.gcd(0, 0)) 0
math.lcm(*integers) 返回给定的整数参数的最小公倍数 print(math.lcm(5, 44, 22)) 220 如果参数之一为0,返回值为0 print(math.lcm(22, 44, 0)) 0 无参数时,返回值为1 print(math.lcm(0, 0)) 0 print(math.lcm()) 1
math.floor(x)返回不大于x的最大整数print(math.floor(9.99)) # 输出9
math.ceil(x)返回不小于x的最小整数print(math.ceil(9.01)) # 输出10
math. sqrt(x) # 返回非负整数 x 的平方根
import mathprint(math.sqrt(5)) # 5的平方根2.23606797749979 math. isqrt(x) # 返回非负整数 x 的整数平方根 print(math.isqrt(5)) # 非负整数 5 的整数平方根2
实例2.3 换披萨 程序员小明在披萨店订购了一个直径为12 英寸的披萨,送货前客服打电话来说“对不起,12 英寸的卖完了,为了补偿您,我们给你2 个直径7 英寸披萨好吗?” 这个更换方案是否合理取决于最终吃到的披萨的多少? 披萨本身是近似于圆柱体的不规则的形状,不同直径披萨的用料、厚度、工艺等都可能不同,所以想用计算机计算,需要做一些近似和假设: 1.披萨是规则的圆柱形 2.厚度均匀 3.材料均匀 4.不同尺寸的披萨用料比例相同 5.不同尺寸的披萨厚度相同 这样可以将披萨抽象为一个圆柱体,前面假设的条件下,此问题简化为大、小披萨的面积计算。圆的面积计算公式:s = πr2
实例2.3 换披萨 程序员小明在披萨店订购了一个直径为12 英寸的披萨,送货前客服打电话来说“对不起,12 英寸的卖完了,为了补偿您,我们给你2 个直径7 英寸披萨好吗?”
import math # 导入math库,后面应用库中的pi值和ceil()函数PI = math.pi # 圆周率π的值# 计算12寸披萨面积与 2 个 7 寸披萨面积之差profit = PI 12 12 / 4 - 2 PI 7 * 7 / 4print(profit) # 输出面积差值36.128315516282626
实例2.3 换披萨
import math # 导入math库,后面应用库中的pi值和ceil()函数
diameter_of_big = int(input()) # 披萨直径为整数
diameter_of_small = int(input()) # 披萨直径为整数
area_of_big = math.pi * (diameter_of_big / 2) ** 2 # 大寸披萨的面积
area_of_small = math.pi * (diameter_of_small / 2) ** 2 # 小寸披萨的面积
n = area_of_big / area_of_small # 大披萨与小披萨面积比值
num = math.ceil(n) # num值为不小于n的最小整数
profit = area_of_small * math.ceil(num) - area_of_big # 更换后多得的披萨的面积
print(num) # 输出合理的更换数量
print(f'{num}个{diameter_of_small}寸披萨与1个{diameter_of_big}寸披萨面积差值为{round(profit, 2)}平方英寸')