Python 运算符与输入输出进阶
文章目录
- [Python 运算符与输入输出进阶](#Python 运算符与输入输出进阶)
-
- [一、输入进阶:`input()` 详解](#一、输入进阶:
input()详解) -
- [1.1 基本用法](#1.1 基本用法)
- [1.2 阻塞特性](#1.2 阻塞特性)
- [1.3 返回值总是字符串](#1.3 返回值总是字符串)
- [1.4 类型转换](#1.4 类型转换)
- [1.5 综合示例:求四个小数的平均值](#1.5 综合示例:求四个小数的平均值)
- 二、算术运算符详解
-
- [2.1 基本运算符](#2.1 基本运算符)
- [2.2 优先级](#2.2 优先级)
- [2.3 除零问题](#2.3 除零问题)
- [2.4 整数除法的结果类型](#2.4 整数除法的结果类型)
- [2.5 地板除 `//`(取整除法)](#2.5 地板除
//(取整除法)) - [2.6 求余 `%`](#2.6 求余
%) - [2.7 乘方 `**`](#2.7 乘方
**)
- 三、关系运算符
-
- [3.1 六种关系运算符](#3.1 六种关系运算符)
- [3.2 字符串比较:字典序](#3.2 字符串比较:字典序)
- [3.3 Python 的 `==` 比较内容](#3.3 Python 的
==比较内容)
- 四、浮点数比较与逻辑运算符
-
- [4.1 浮点数精度问题](#4.1 浮点数精度问题)
- [4.2 正确比较浮点数:epsilon 法](#4.2 正确比较浮点数:epsilon 法)
- [4.3 ==逻辑运算符==](#4.3 ==逻辑运算符==)
- [4.4 短路求值](#4.4 短路求值)
- 五、赋值运算符
-
- [5.1 基本赋值](#5.1 基本赋值)
- [5.2 链式赋值](#5.2 链式赋值)
- [5.3 ==多元赋值==](#5.3 ==多元赋值==)
- [5.4 复合赋值运算符](#5.4 复合赋值运算符)
- [5.5 Python 无自增/自减](#5.5 Python 无自增/自减)
- [5.6 其他运算符(了解)](#5.6 其他运算符(了解))
- 六、基础练习
-
- [练习题 1(多选)](#练习题 1(多选))
- [练习题 2(单选)](#练习题 2(单选))
- [练习题 3(单选)](#练习题 3(单选))
- 要点速查
- [一、输入进阶:`input()` 详解](#一、输入进阶:
🔑 关键要点速览(来自高亮标注)
一、输入进阶:input() 详解
1.1 基本用法
python
number = input("请输入一个整数:")
print(f"您输入的数字是 {number}")
input()从控制台读取一行用户输入- 括号内的字符串参数作为提示信息显示给用户
- 程序执行到
input()时会阻塞等待,直至用户输入内容并按下回车
1.2 阻塞特性
input() 一旦执行就会等待用户输入------"不见不散"。无论等待多久(几秒还是几小时),用户不输入,程序就不继续执行。
计算机才是最忠实的伙伴------约妹子可能等一会儿就走了,但
input()会一直等你。
1.3 返回值总是字符串
python
a = input("请输入数字:")
print(type(a)) # <class 'str'> --- 永远是字符串!
即使提示"请输入整数",返回的值仍然是 字符串类型 (str)。
1.4 类型转换
若需要对输入内容进行算术运算,必须手动转换类型:
python
# 字符串 → 整数
a = int(a) # int()
# 字符串 → 浮点数
b = float(b) # float()
# 整数/浮点数 → 字符串
s = str(123) # str()
错误示例(字符串拼接而非算术运算):
python
a = input("请输入第一个整数:") # "10"
b = input("请输入第二个整数:") # "20"
print(f"{a} + {b} = {a + b}") # 输出:10 + 20 = 1020(拼接!)
正确做法(先转换再运算):
python
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
print(f"{a} + {b} = {a + b}") # 输出:10 + 20 = 30
1.5 综合示例:求四个小数的平均值
python
a = float(input("请输入第1个数:"))
b = float(input("请输入第2个数:"))
c = float(input("请输入第3个数:"))
d = float(input("请输入第4个数:"))
avg = (a + b + c + d) / 4
print(f"平均值是:{avg}")
若要处理任意个数(如五个、六个),需要用到循环,将在后续课程介绍。
二、算术运算符详解
2.1 基本运算符
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 1 + 2 |
3 |
- |
减法 | 5 - 3 |
2 |
* |
乘法 | 2 * 3 |
6 |
/ |
除法 | 7 / 2 |
3.5 |
// |
地板除(取整除法) | 7 // 2 |
3 |
% |
求余(取模) | 7 % 3 |
1 |
** |
乘方 | 2 ** 3 |
8 |
2.2 优先级
与数学一致:先乘除后加减 ,可用 () 改变优先级:
python
print(1 + 2 * 3) # 7(先乘后加)
print((1 + 2) * 3) # 9(括号改变优先级)
2.3 除零问题
Python 中零不能作为除数 ,无论是整数 0 还是浮点数 0.0,都会抛出异常:
python
print(10 / 0) # ❌ ZeroDivisionError: division by zero
print(10 / 0.0) # ❌ ZeroDivisionError: float division by zero
其他语言(如 C++)中,除以整数零抛异常但除以浮点数零得无穷大,Python 则一视同仁。
2.4 整数除法的结果类型
Python 中 整数除以整数,结果仍是浮点数(不截断):
python
print(1 / 2) # 0.5(不是 0)
大多数编程语言(C++、Java)中,
1 / 2的结果是0(舍弃小数部分)。Python 的设定更符合直观数学理解。
2.5 地板除 //(取整除法)
// 对计算结果进行向下取整:
python
print(7 // 2) # 3
print(-7 // 2) # -4(注意:向下取整,不是向零取整!)
⚠️ 负数时向下取整的方向:
-7 / 2 = -3.5,向下取整得-4(更小的数),而非-3。
2.6 求余 %
python
print(7 % 3) # 1(7 ÷ 3 = 2 余 1)
- 余数一定小于除数
- Python 中负数求余结果与 C++/Java 不同(Python 结果始终与除数同号)
2.7 乘方 **
python
print(4 ** 2) # 16(4 的平方)
print(4 ** 0.5) # 2.0(4 的开方 = 根号 4)
- 支持整数次方和小数次方(开方运算)
- 开方和乘方用同一个运算符表示
三、关系运算符
3.1 六种关系运算符
| 运算符 | 含义 | 数学写法 |
|---|---|---|
< |
小于 | < |
<= |
小于等于 | ≤ |
> |
大于 | > |
>= |
大于等于 | ≥ |
== |
等于(比较内容) | = |
!= |
不等于 | ≠ |
关系表达式返回布尔值 (True / False):
python
a, b = 10, 20
print(a < b) # True
print(a > b) # False
print(a <= b) # True
print(a >= b) # False
print(a == b) # False
print(a != b) # True
3.2 字符串比较:字典序
字符串之间也能比较大小,规则是字典序(lexicographic order):
- 先比较首字母在字母表中的顺序
- 首字母相同则比较第二个,依此类推
- 全部相同则相等
python
print("hello" < "word") # True(h 在 w 前面)
print("hello" == "word") # False
中文比较按底层字节编码的数字比较,实际开发中不会用字典序比较中文。
3.3 Python 的 == 比较内容
Python 直接用 == 比较字符串内容是否相同(这是主流语言的做法):
python
print("hello" == "hello") # True(比较内容)
C 语言用
strcmp()比较字符串内容,Java 用.equals()方法------这些反而是小众设定。C++、Go、JavaScript 等主流语言均与 Python 一致。
四、浮点数比较与逻辑运算符
4.1 浮点数精度问题
因 IEEE 754 标准,浮点数在内存中存在微小误差:
python
print(0.1 + 0.2 == 0.3) # False!(0.1+0.2 略大于 0.3)
print(0.1 + 0.2) # 0.30000000000000004
4.2 正确比较浮点数:epsilon 法
通过做差并判断差值是否在误差范围内来比较:
python
a = 0.1 + 0.2
b = 0.3
epsilon = 0.00001
if -epsilon < a - b < epsilon: # 链式比较
print("a 和 b 相等")
链式比较 是 Python 的特色语法:
-epsilon < a - b < epsilon等价于-epsilon < a - b and a - b < epsilon。
4.3 逻辑运算符
| 运算符 | 含义 | 说明 |
|---|---|---|
and |
逻辑与(并且) | 两侧均为 True 则 True,一假则假 |
or |
逻辑或(或者) | 至少一侧为 True 则 True,一真则真 |
not |
逻辑非 | True → False,False → True |
python
a, b, c = 10, 20, 30
# and:一假则假
print(a < b and b < c) # True(两个都成立)
print(a < b and b > c) # False(b > c 不成立)
# or:一真则真
print(a > b or b < c) # True(b < c 成立)
print(a > b or b > c) # False(两个都不成立)
# not:取反
print(not a < b) # False(a < b 为 True,取反后为 False)
print(not a > b) # True(a > b 为 False,取反后为 True)
Python 使用英文单词(
and/or/not)而非符号(&&/||/!),可读性更强。
4.4 短路求值
and 的短路 :若左侧为 False,整体必为 False,右侧不再求值。
or 的短路 :若左侧为 True,整体必为 True,右侧不再求值。
python
a, b = 10, 20
# and 短路:a > b 是 False,右侧除零不执行(不抛异常)
print(a > b and 10 / 0 == 1) # False(安全执行)
# or 短路:a < b 是 True,右侧除零不执行
print(a < b or 10 / 0 == 1) # True(安全执行)
短路求值类似于生活中的场景:丈母娘要求"有房并且有车",你说"没房"------车子就不用再提了。
五、赋值运算符
5.1 基本赋值
python
a = 10 # 将 10 赋给变量 a
a = a + 1 # 先读取 a,计算 a + 1,再赋给 a
⚠️
=是赋值 ,==才是比较相等 。左侧必须是一个变量(不能是常量,如10 = 20会报错)。
5.2 链式赋值
python
a = b = 20 # 等价于 b = 20; a = b
语法上合法,但不推荐------一行只做一个操作,可读性更好。
5.3 多元赋值
python
a, b = 10, 20 # a = 10, b = 20
应用:变量交换
python
a, b = 10, 20
a, b = b, a # 一步完成交换!
print(a, b) # 20 10
传统方式需要引入临时变量(
temp = a; a = b; b = temp),Python 的多元赋值一步到位。
5.4 复合赋值运算符
| 运算符 | 示例 | 等价于 |
|---|---|---|
+= |
a += 1 |
a = a + 1 |
-= |
a -= 1 |
a = a - 1 |
*= |
a *= 2 |
a = a * 2 |
/= |
a /= 2 |
a = a / 2 |
%= |
a %= 2 |
a = a % 2 |
**= |
a **= 2 |
a = a ** 2 |
//= |
a //= 2 |
a = a // 2 |
python
a = 0
a += 1 # a = 0 + 1 = 1
a *= 5 # a = 1 * 5 = 5
⚠️ 使用复合赋值前,变量必须先定义 ------
a += 1要求a已存在。
5.5 Python 无自增/自减
Python 不支持 ++ 和 -- 运算符:
python
a = 10
++a # ✅ 语法不报错,但 +(+a) 只是取了正号,a 不变
a++ # ❌ 语法错误:SyntaxError
Python 设计哲学:一种问题只提供一种方案 。
a += 1已能满足自增需求,无需引入前置/后置自增的复杂规则。
5.6 其他运算符(了解)
- 身份运算符 :
is/is not--- 判断两个对象是否为同一对象 - 成员运算符 :
in/not in--- 判断元素是否在容器中 - 位运算符 :
&|^~<<>>--- 后续必要时再介绍
六、基础练习
练习题 1(多选)
以下关于变量之间加法运算的说法正确的是:
A. Python 中字符串之间能够相加
B. Python 中的字符串可以和整数相加
C. Python 中的整数可以和浮点数相加
D. Python 中的整数可以和布尔值相加
点击查看答案
答案:A、C、D
- A ✅:字符串之间可以相加(拼接),如
"hello" + "world"→"helloworld" - B ❌:字符串和整数不能直接相加,会抛出
TypeError - C ✅:整数和浮点数可以相加,结果为浮点数
- D ✅:整数和布尔值可以相加,
True视为1,False视为0
⚠️ 整数与布尔值相加虽然语法上可行,但无实际意义------布尔值只应表示真/假,不应参与算术运算。Java 等语言直接禁止这种混合运算,更合理。
练习题 2(单选)
关于类型的说法,正确的是:
A. Python 中既有字符串类型,也有字符类型
B. Python 中既有 float,也有 double
C. Python 中既有 int,也有 long
D. Python 中的整数表示范围无上限
点击查看答案
答案:D
- A ❌:Python 只有字符串类型
str,没有字符类型,单个字符也是长度为 1 的字符串 - B ❌:Python 只有
float(双精度浮点数),没有double------Python 的float相当于 C++/Java 的double - C ❌:Python 只有
int,可以自动扩容表示大数,不需要long - D ✅:Python 的
int可根据数据大小自动扩容,理论上只受内存限制
练习题 3(单选)
以下 Python 代码合法的是:
A. int a = 10
B. a = 10;
C. a = True(注意:True 首字母小写)
D. a = "hello" + 10
点击查看答案
答案:B
- A ❌:Python 定义变量不需要指定类型
- B ✅:Python 中可以加分号,虽然通常不加,但加了不算错;分号主要用于同一行写多条语句
- C ❌:
True首字母必须大写 ,小写true会导致NameError - D ❌:字符串和整数不能相加,会抛出
TypeError
要点速查
| 概念 | 说明 | 示例 |
|---|---|---|
input() |
读取用户输入,返回字符串(阻塞等待) | s = input("提示:") |
| 类型转换 | int()、float()、str() |
n = int("123") |
| 除零 | Python 一律视为异常 | 10 / 0 → ZeroDivisionError |
| 整数除法 | int / int → float(不截断) | 1 / 2 → 0.5 |
地板除 // |
向下取整 | -7 // 2 → -4 |
求余 % |
余数小于除数 | 7 % 3 → 1 |
乘方 ** |
支持小数次方(开方) | 4 ** 0.5 → 2.0 |
| 关系运算符 | 返回 True/False |
a == b、a != b |
| 字符串字典序 | 按字母顺序依次比较 | "hello" < "word" |
| 浮点数比较 | 用 epsilon 做差法 | abs(a-b) < 1e-5 |
| 逻辑运算 | and / or / not |
a > 0 and b < 10 |
| 短路求值 | 左侧已决定结果则右侧不求值 | False and 1/0 安全 |
| 链式/多元赋值 | 不推荐链式,推荐多元 | a, b = b, a |
| 复合赋值 | += -= *= /= %= **= //= |
a += 1 |
无 ++/-- |
Python 设计哲学:一种问题一种方案 | 用 a += 1 替代 |