python基础学习-02(数字、字符串与运算符)
一、 数字、字符串与运算符
1.数字类型:整数与浮点数
| 类型 | 关键字 | 例子 | 特点 |
|---|---|---|---|
| 整数 | int | 42,-1,0 | 没有小数点,精确无误差 |
| 浮点数 | float | 3.14,-0.12,2.0 | 有小数点,存在精度限制 |
| 运算符号一览: | |||
| 运算符 | 含义 | 示例 | 结果 |
| ---- | -------- | -------- | ----- |
+ |
加 | 5 + 3 |
8 |
- |
减 | 5 - 3 |
2 |
* |
乘 | 5 * 3 |
15 |
/ |
除(得浮点数) | 5 / 2 |
2.5 |
// |
整除(向下取整) | 5 // 2 |
2 |
% |
取余(模运算) | 5 % 2 |
1 |
** |
幂运算 | 2 ** 3 |
8 |
生活比喻:// 整除就像把 10 块糖分给 4 个小朋友,每人能拿到完整的 2 块(剩下的 2 块就是 % 取余的结果)。
2. 字符串:文本容器
字符串就是一串字符,用引号包起来。可以把字符串想象成一列火车,每个字符是一个车厢,车厢从 0 开始编号。
字符串:"P y t h o n"
正索引: 0 1 2 3 4 5
负索引:-6 -5 -4 -3 -2 -1
索引规则:
| 操作 | 写法 | 结果 | 说明 |
|---|---|---|---|
| 取单个字符 | s[0] | ‘P’ | 第一个字符 |
| 取单个字符 | s[-1] | ‘n’ | 最后一个字符 |
| 切片 | s[0:3] | ‘Pyt’ | 从0到3(不含3) |
| 切片 | s[:3] | ‘Pyt’ | 从开头到3(不含3) |
| 切片 | s[3:] | ‘hon’ | 从3到结尾 |
| 切片 | s[::-1] | ‘nohtyP’ | 步长为-1反转 |
| 切片 | s[::2] | ‘Pto’ | 每隔一个取一个 |
记忆口诀:切片[start:stop:step],取头不取尾,step为步长
常见字符串用法:
| 方法 | 作用 | 示例 | 结果 |
|---|---|---|---|
| len(s) | 获取长度 | len(“Python”) | 6 |
| s.upper() | 全大写 | “hello”.upper() | “HELLO” |
| s.lower() | 全小写 | “HELLO”.lower() | “hello” |
| s.strip() | 去掉两端空格 | " hi ".strip() | “hi” |
| s.replace(a,b) | 替换 | “ab”.replace(“a”,“c”) | “cb” |
| s.split(“,”) | 按分隔符拆分 | “a,b”.split(“,”) | [“a”,“b”] |
| s.find(“x”) | 查找子串位置 | “abc”.find(“b”) | 1 |
| s.count(“a”) | 统计出现的次数 | “banana”.count(“a”) | 3 |
| s.startswith(“P”) | 是否以某串开头 | “Python”.startswith(“P”) | True |
| s.endswith(“n”) | 是否以某串结尾 | “Python”.endswith(“n”) | True |
3. 比较运算符与逻辑运算符
比较运算符(结果永远是True或False)
| 运算符 | 含义 | 示例 |
|---|---|---|
== |
等于 | 5 == 5 → True |
!= |
不等于 | 5 != 3 → True |
> |
大于 | 5 > 3 → True |
< |
小于 | 5 < 3 → False |
>= |
大于等于 | 5 >= 5 → True |
<= |
小于等于 | 3 <= 5 → True |
逻辑运算符(用来组合多个条件)
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
and |
与(都真才真) | True and False |
False |
or |
或(有真就真) | True or False |
True |
not |
非(取反) | not True |
False |
4. 运算符优先级
当多个运算符同时出现时,Python按照以下顺序计算(从高到低):
1.() 括号(最高优先级,想先算就用括号)
2.** 幂运算
3.* / // % 乘 除 整除 取余
4.+ - 加减
5. == != > < >= <= 比较
6. not 逻辑非
7. and 逻辑与
8. or 逻辑或(最低优先级)
二、代码示例
将以下代码复制到你的 Python 文件中运行,观察输出结果。
# ========== 数字运算 ==========
print("=== 数字运算 ===")
a = 17
b = 5
print(f"{a} + {b} = {a + b}") # 22
print(f"{a} - {b} = {a - b}") # 12
print(f"{a} * {b} = {a * b}") # 85
print(f"{a} / {b} = {a / b}") # 3.4
print(f"{a} // {b} = {a // b}") # 3(整除)
print(f"{a} % {b} = {a % b}") # 2(余数)
print(f"{a} ** {b} = {a ** b}") # 1419857(17的5次方)
# ========== 字符串索引与切片 ==========
print("\n=== 字符串索引与切片 ===")
s = "Hello Python"
print(f"原字符串: '{s}'")
print(f"长度: {len(s)}")
print(f"第1个字符 s[0]: '{s[0]}'")
print(f"最后1个字符 s[-1]: '{s[-1]}'")
print(f"前5个字符 s[:5]: '{s[:5]}'")
print(f"后6个字符 s[6:]: '{s[6:]}'")
print(f"反转 s[::-1]: '{s[::-1]}'")
print(f"每隔一个取 s[::2]: '{s[::2]}'")
# ========== 字符串常用方法 ==========
print("\n=== 字符串常用方法 ===")
text = " Python is Fun! "
print(f"原始: '{text}'")
print(f"去空格 strip(): '{text.strip()}'")
print(f"全大写 upper(): '{text.upper()}'")
print(f"全小写 lower(): '{text.lower()}'")
print(f"替换 replace(): '{text.replace('Fun', 'Amazing')}'")
print(f"拆分 split(): {text.strip().split()}")
print(f"查找 find('is'): {text.find('is')}")
print(f"统计 count('n'): {text.count('n')}")
print(f"是否以' P'开头: {text.startswith(' P')}")
# ========== 比较与逻辑运算 ==========
print("\n=== 比较与逻辑运算 ===")
x = 10
y = 20
print(f"x = {x}, y = {y}")
print(f"x == y: {x == y}")
print(f"x != y: {x != y}")
print(f"x < y: {x < y}")
print(f"x > 5 and y > 15: {x > 5 and y > 15}")
print(f"x > 15 or y > 15: {x > 15 or y > 15}")
print(f"not (x > y): {not (x > y)}")
# ========== 运算符优先级演示 ==========
print("\n=== 运算符优先级 ===")
print(f"3 + 5 * 2 = {3 + 5 * 2}") # 13(先乘后加)
print(f"(3 + 5) * 2 = {(3 + 5) * 2}") # 16(括号优先)
print(f"2 ** 3 + 1 = {2 ** 3 + 1}") # 9(先幂后加)
print(f"5 > 3 and 2 < 1: {5 > 3 and 2 < 1}") # False
三、练习题
1、字符串信息提取
给定字符串 email = "zhangsan@python.org",请完成以下操作:
- 提取用户名(
@前面的部分) - 提取域名(
@后面的部分) - 判断域名是否以
.org结尾 - 将用户名转为大写输出
email = str("zhangsan@python.org")
#找到@所在的位置
n=email.find("@")
#提取用户名和域名
username=email[:n] #@之前为用户名
domain=email[n+1:] #@之后为域名
print(f"用户名:{username}")
print(f"域名:{domain}")
print(f"域名是否以`.org`结尾: {domain.endswith('.org')}")
print(f"用户名大写:{username.upper()}")
email = str("zhangsan@python.org")
#找到@所在的位置
n=email.find("@")
#提取用户名和域名
username=email[:n] #@之前为用户名
domain=email[n+1:] #@之后为域名
print(f"用户名:{username}")
print(f"域名:{domain}")
print(f"域名是否以`.org`结尾: {domain.endswith('.org')}")
print(f"用户名大写:{username.upper()}")
答案详解:
-
find("@")的作用:find()方法在字符串中查找指定字符@的位置,返回它在字符串中的索引(从0开始计数)。例如,在"zhangsan@python.org"中,@在第8个位置(索引为8)。 -
切片操作
email[:n]和email[n+1:]:email[:n]:从字符串开头(索引0)切到@之前(索引n),得到用户名"zhangsan"。email[n+1:]:从@之后(索引n+1)切到字符串末尾,得到域名"python.org"。
-
endswith('.org'):检查域名是否以.org结尾,返回True或False。 -
upper():将用户名中的所有字母转为大写。

2、数字拆解
给定一个三位整数 num = 357,请用数学运算(// 和 %)分别提取出它的百位、十位、个位数字,并计算这三个数字的和。输出格式:"百位:X, 十位:Y, 个位:Z, 和:SUM"。
num= 456
#提取各位数字 //整除 %取余
X = num // 100
Y = (num % 100) // 10
Z = num % 10
#三位数字之和
total = X + Y + Z
print(f"百位:{X}, 十位:{Y}, 个位:{Z}, 和:{total}") # 输出:百位:4, 十位:5, 个位:6, 和:15
num= 456
#提取各位数字 //整除 %取余
X = num // 100
Y = (num % 100) // 10
Z = num % 10
#三位数字之和
total = X + Y + Z
print(f"百位:{X}, 十位:{Y}, 个位:{Z}, 和:{total}") # 输出:百位:4, 十位:5, 个位:6, 和:15
答案详解:
-
//(整除运算符):返回除法结果的整数部分,去掉小数。例如456 // 100 = 4,直接得到百位数字。 -
%(取余运算符):返回除法后的余数。例如456 % 100 = 56,得到去掉百位后的剩余部分。 -
提取十位数字
(num % 100) // 10:- 先
456 % 100 = 56,得到十位和个位组成的数。 - 再
56 // 10 = 5,得到十位数字。
- 先
-
提取个位数字
num % 10:456 % 10 = 6,直接得到个位数字。 -
计算总和:将百位、十位、个位数字相加得到总和。

知识点补充学习
- 浮点数精度陷阱:
0.1 + 0.2在 Python 中不等于0.3,而是0.30000000000000004。这是因为计算机用二进制存储小数,就像十进制无法精确表示 1/3 一样,高精度计算请用Decimal模块。
根本原因:计算机使用二进制(基数为2)表示浮点数,而像0.1、0.2这样的十进制小数在二进制中是无限循环小数,无法精确表示。这类似于十进制中无法精确表示1/3(0.333…)。当计算机存储这些近似值时,就会产生微小的舍入误差。
直观对比示例:
# 查看实际存储值
print(f"0.1 的实际存储值: {0.1:.55f}")
print(f"0.2 的实际存储值: {0.2:.55f}")
print(f"0.1 + 0.2 的结果: {0.1 + 0.2:.55f}")
print(f"0.3 的实际存储值: {0.3:.55f}")
# 直接比较
print(f"0.1 + 0.2 == 0.3: {0.1 + 0.2 == 0.3}") # 输出: False
print(f"0.1 + 0.2 的精确值: {0.1 + 0.2}") # 输出: 0.30000000000000004
# 使用math.isclose()进行容差比较
import math
print(f"math.isclose(0.1+0.2, 0.3): {math.isclose(0.1+0.2, 0.3)}") # 输出: True
解决思路:
#使用decilmal模块(推荐使用高精度场景)
print("第一种方法:使用decilmal模块(推荐使用高精度场景)")
from decimal import Decimal
# 注意:初始化时必须使用字符串,否则仍会引入浮点误差
result = Decimal('0.1') + Decimal('0.2')
print(result) # 输出: 0.3
print(result == Decimal('0.3')) # 输出: True
#使用round()函数(适用于展示或简单比较)
print("第二种方法:使用round()函数")
result = round(0.1 + 0.2, 1)
print(result) # 输出: 0.3
print(result == 0.3) # 输出: True
- 字符串不可变:字符串一旦创建就不能修改。
s[0] = 'X'会报错!想"修改"只能创建新字符串,比如s = 'X' + s[1:]。 isvs==:==比较值是否相等,is比较是否是同一个对象。- f-string 是 Python 3.6+ 的利器:
f"结果是{变量}"比"结果是" + str(变量)更简洁高效,推荐优先使用。
更多推荐
所有评论(0)