一、 数字、字符串与运算符

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 == 5True
!= 不等于 5 != 3True
> 大于 5 > 3True
< 小于 5 < 3False
>= 大于等于 5 >= 5True
<= 小于等于 3 <= 5True
逻辑运算符(用来组合多个条件)
运算符 含义 示例 结果
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",请完成以下操作:

  1. 提取用户名(@ 前面的部分)
  2. 提取域名(@ 后面的部分)
  3. 判断域名是否以 .org 结尾
  4. 将用户名转为大写输出
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()}")

答案详解:

  1. find("@") 的作用find() 方法在字符串中查找指定字符 @ 的位置,返回它在字符串中的索引(从0开始计数)。例如,在 "zhangsan@python.org" 中,@ 在第8个位置(索引为8)。

  2. 切片操作 email[:n]email[n+1:]

    • email[:n]:从字符串开头(索引0)切到 @ 之前(索引n),得到用户名 "zhangsan"
    • email[n+1:]:从 @ 之后(索引n+1)切到字符串末尾,得到域名 "python.org"
  3. endswith('.org'):检查域名是否以 .org 结尾,返回 TrueFalse

  4. 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

答案详解:

  1. //(整除运算符):返回除法结果的整数部分,去掉小数。例如 456 // 100 = 4,直接得到百位数字。

  2. %(取余运算符):返回除法后的余数。例如 456 % 100 = 56,得到去掉百位后的剩余部分。

  3. 提取十位数字 (num % 100) // 10

    • 456 % 100 = 56,得到十位和个位组成的数。
    • 56 // 10 = 5,得到十位数字。
  4. 提取个位数字 num % 10456 % 10 = 6,直接得到个位数字。

  5. 计算总和:将百位、十位、个位数字相加得到总和。

运行结果

知识点补充学习

  • 浮点数精度陷阱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:]
  • is vs ==== 比较值是否相等,is 比较是否是同一个对象。
  • f-string 是 Python 3.6+ 的利器f"结果是{变量}""结果是" + str(变量) 更简洁高效,推荐优先使用。

更多推荐