- 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.3 数值元算.ipynb @master — view markup · raw · history · blame
数值运算¶
Python 内置了“+、-、*、/、//、% 和 ** ”等__数值运算操作符__,分别被用于加、减、乘、除、整除、取模和幂运算。</font>
| 优先级 | 运算 | 运算符 | 符号运算 | 实例(a=8, b=5) | 解释 |
|---|---|---|---|---|---|
| 1 | 加 | + | a + b | print(a + b) | 两个数加和,13 |
| 1 | 减 | - | a - b | print(a - b) | 两个数相减,3 |
| 2 | 乘 | * | a * b | print(a * b) | 两个数相乘,40 |
| 2 | 除 | / | a / b | print(a / b) | 两个数相除,1.6 |
| 2 | 整除 | // | a // b | print(a // b) | 两个数整除,返回整数商1 |
| 2 | 取模 | % | a % b | print(a % b) | 模运算,返回整除的余数3 |
| 3 | 取正/取负 | +/- | +a、-b | print(+a, -b) | 符号运算,返回8和-5 |
| 4 | 幂 | ** | a ** b | print(a ** b) | 幂运算,32768 |
这里的加、减、乘、取正/取负与数学上同类运算意义相同,下面介绍其他几种运算。
- ### 精确除法(/)
不论参与运算是数是整数还是浮点数,是正数还是负数,都直接进行除法运算,__精确除法__运算结果的类型总是__浮点数__。</font>
print(12 / 4) # 精确除的结果永远为浮点数 3.0
print(-10 / 4) # -2.5
print(37.58 / -0.5) # -75.16
print(37.58 / 3) # 12.526666666666666
- ### 整除(//)
采用的是__向下取整__的算法得到整数结果。所谓向下取整,是在计算过程中,向__负无穷大__的方向取整。需要注意的是,当参与运算的两个操作数都是整型数字时,结果是整型;当有__浮点数__参与运算的时候,结果为__值为整数的浮点数__。</font>
print(10 // 4) # 取负无穷大方向最接近 2.5的那个整数 2
print(10.0 // 4) # 2.0,结果为浮点类型的整数
print(-10 // 4) # 取负无穷大方向最接近 -2.5的那个整数 -3
print(37.58 // -3.5) # 取负无穷大方向最接近 -10.737142857142857的那个整数 -11.0
- ### 模运算(% )
模运算数学定义如下:
操作数 a 和 b 可以是整数,也可以是浮点数。Python 采取的向下取整算法决定了模运算的一个规律:
__模非零时,其符号与操作数 b 相同*__。

print(-11 % 4) # 输出:1
print(-11 % -4) # 输出:-3
print(11 % 4) # 输出:3
print(11 % -4) # 输出:-1
print(3.5 % -2) # 输出:-0.5
print(4 % -2) # 输出:0
模运算在数论和程序设计中都有着广泛的应用,主要应用于具有周期性规律的场景,从奇偶数的判别到素数的判定都会用到模运算。
例如: 根据x % n结果是否为0可判定x能否被n整除;
根据 x % 2 的结果是 0 还是 1 判断整数 x 的奇偶性。
下面是一些常见的应用方式。
判断整除
a % 4 == 0 and a % 100 != 0 # 结果为True则表示a可被4整除但不能被100整除
应用:输入一个年份,判断是否闰年¶
year = int(input()) # 输入一个整数表示年份
if year % 400 == 0 or year % 100 != 0 and year % 4 == 0: # 如果能被400整除或是能被4整除但不能被 100整除
print(f'{year}年是闰年')
print("jgkd")
else:
print(f'{year}年是平年')
判断奇偶
a % 2 == 0 # 结果为True则表示a是偶数;结果为False则表示a是奇数
应用:输出列表中的偶数¶
score = [56,45,89,78,23,19,22] # 一个列表
for i in score: # 遍历列表中的数字
if i % 2 == 0: # 如果当前数字是偶数
print(i) # 输出当前数字
使结果落在某区间
a % 7 # 结果在 0, 1, 2, 3, 4, 5, 6中
a % 26 # 结果在 0, 1, 2,......24, 25中
应用: 已知2022年9月1日是星期四,输入一个日期,判断是星期几¶
date = int(input())
day = date % 7 + 3 # 对7取模的值为0,1,2,3,4,5,6
print(f'2022年9月{date}日是星期{day}')
num = '日一二三四五六' # 字符串,字符序号为0,1,2,3,4,5,6
print(f'2022年9月{date}日是星期{num[day]}') # num[day]取字符串中第几个字符
应用:输入一个大写字母,输出它后面第4个大写字母¶
letter = input()
new_letter = chr((ord(letter) - 65 + 4) % 26 + 65) # 对7取模的值为0,1,2,3,4,5,6
print(f'{letter}后面第四个大写字母是{new_letter}')
A
A后面第四个大写字母是E
Y
Y后面第四个大写字母是C
- ### 幂运算(** )
Python 中用__双星号“\*\*”__表示幂运算,a 的b次幂的表达式是 a ** b。操作数 a 和 b 可以是整数,也可以是浮点数。</font>
print(3 ** 2) # 输出:9
print(0.5 ** 2) # 输出:0.25
print()
a ** b 中 b 为浮点数时包含开方运算,负数开偶次方结果为复数。
print(3 ** 0.5) # 3开平发,输出:1.7320508075688772
print(8 ** (1 / 3)) # 8开立方,输出:2.0
print(2 ** 4.5) # 等价于2的9次方再开平方,输出:22.627416997969522
print((-4) ** 0.5) # 输出:(1.2246467991473532e-16+2j)
print(3**0.15)
- ### 运算优先级
数学运算是用运算符将对象连接起来构成表达式来实现。
程序设计中,表达式的写法与数学中的表达式稍有不同,需要按照程序设计语言规定的表示方法进行构造,运算符的优先级由高到低排列如下表所示:</font>
| 序号 | 运算符 | 描述 |
|---|---|---|
| 1 | () | 括号表达式 |
| 2 | ** | 幂运算 |
| 3 | +x、 -x | 正、负 |
| 4 | *、 / 、% | 乘法、除法与取模 |
| 5 | + 、- | 加法与减法 |
特别需要注意的是,优先级相同时,除了幂运算和正、负运算的结合方向是从右向左,其他运算顺序为从左到右。
在复杂表达式中适当__加括号__是较好的编程习惯,既可以确保运算按自己预定的顺序进行,又提高程序的可读性和可维护性。
print(-2 ** 4) # 幂运算优先级高于取负运算,相当于 -(2**4),输出-16
print((-2) ** 4) # 括号改变优先级,3先取负,再进行幂运算,输出16
print(2 ** -4) # 幂运算和取负运算均为从右向左,4先取负,再进行幂运算,输出0.0625
print(2 ** 3 ** 2) # 幂运算从右向左,相当于2**(3**2)即2**9,输出512
print((2 ** 3) ** 2) # 括号改变优先级,即8**2,输出64
实例: 一元二次方程求解¶
一元二次方程可以用求根公式进行求解。
现有一元二次方程:
$ax^2 + bx + c = 0$
当a,b,c的值分别为5,8,3时,编程求其实根。
解析:此题中,判别式 $\Delta=b^2-4ac= 8 \times 8 - 4 \times 5 \times 3 = 4 > 0$,该方程有两个不相等的实数解,可利用如下一元二次方程的求根公式进行计算。
$$x_1,x_2 =\frac{-b \pm \sqrt{b^{2} - 4ac}}{2a}$$a, b, c = 5, 8, 3 # 同步赋值,5,8,3分别赋值给a,b,c
x1 = (-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) # 用0.5代替1/2
print(x1, x2) # 在一行内输出-0.6 -1.0,输出结果用空格分隔
print(f'x1 = {x1}, x2 = {x2}') # 在一行内输出x1 = -0.6, x2 = -1.0
程序中将求根公式转换为程序中的表达式:
x1 = ( -b + ( b * b – 4 * a * c) ** (1 / 2) ) / ( 2 * a )
x2 = ( -b - ( b * b – 4 * a * c) ** (1 / 2) ) / ( 2 * a )
表达式中的乘号不可以省略,分母中的 (2 * a)
的括号不能省略,否则因乘除的优级相同,会按先后顺序进行运算,那么结果就是乘 2 再除 a。
如果一定要去掉括号的话,可以将2 * a 中的乘号改为除号(/)以保持数学上的运算顺序。
分子里 (1 / 2)的括号不可以省略,因为幂运算优先级高于除法运算,没有括号时会先计算 1 次幂,再除 2,计算顺序错误。为避免这个问题,可以将 (1 / 2) 改写为 0.5。
练一练
斐波那契数列的通项公式为:
$$a_n=\frac{1}{\sqrt{5}}\left [ \left ( \frac{1+\sqrt{5} }{2} \right )^{n} - \left ( \frac{1-\sqrt{5} }{2} \right )^{n} \right ] $$
输入一个整数n,计算数列第n项的值,并int()取整后输出。
例如:输入12时应输出144;输入48时应输出4807526976
# 在空行中补充你的代码
# 输入整数n值
# 根据公式计算第n项的值
#将计算结果取整后输出