【Python】3.Python运算符与输入输出进阶

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(单选))
    • 要点速查

🔑 关键要点速览(来自高亮标注)

  1. [整数 ÷ 整数 = 浮点数](#整数 ÷ 整数 = 浮点数) --- Python 不截断,1 / 20.5
  2. [浮点数比较用 epsilon 法](#浮点数比较用 epsilon 法) --- abs(a-b) < 1e-5,勿直接 ==
  3. 逻辑运算符 --- and / or / not 英文单词,支持短路求值
  4. 多元赋值 --- a, b = 10, 20 同时赋多变量
  5. 变量交换 --- a, b = b, a 一行完成,无需临时变量
  6. [无 ++/--](#无 ++/–) --- Python 不支持,用 += 1 / -= 1 替代

一、输入进阶: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 视为 1False 视为 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 / 0ZeroDivisionError
整数除法 int / int → float(不截断) 1 / 20.5
地板除 // 向下取整 -7 // 2-4
求余 % 余数小于除数 7 % 31
乘方 ** 支持小数次方(开方) 4 ** 0.52.0
关系运算符 返回 True/False a == ba != 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 替代
相关推荐
练习时长一年9 分钟前
@SneakyThrows注解
开发语言
我的xiaodoujiao12 分钟前
快速学习Python基础知识详细图文教程14--模块
开发语言·python·学习·测试工具
残影飞雪17 分钟前
Ollama对话脚本
python
jerryinwuhan20 分钟前
数据预处理技术 2026-2027-1 开篇-课程介绍
大数据·python
NoteStream25 分钟前
【c语言基础】C语言常见概念
c语言·开发语言·编辑器
吃好睡好便好26 分钟前
MATLAB中图像的线性变换
开发语言·图像处理·学习·计算机视觉·matlab
charlie11451419133 分钟前
Cinux —— 给物理内存建账本:bitmap 物理内存管理器
开发语言·c++·操作系统·开源项目
看昭奚恤哭43 分钟前
ontainer App】Container App无法从Container Registries 拉取镜像 - 报错 Forbidden
后端·python·flask
0566461 小时前
Python康复训练——数据结构
数据结构·windows·python
Tinyfacture1 小时前
接口自动化之添加商品(pytest)
python·测试工具·自动化·pytest