一、先搞懂:字符编码(为什么会有乱码?)

你可以把编码理解成:电脑把文字变成数字的规则


1. ASCII(美国人用的)

  • 只包含:英文、数字、符号
  • 1 个字节 = 1 个字符
  • 缺点:装不下中文

2. GB2312 / Shift_JIS(各国自己搞的)

  • 中国:GB2312 存中文
  • 日本:Shift_JIS 存日文
  • 问题:混用就乱码

3. Unicode(全世界统一)

  • 把所有语言都放一套规则里
  • 再也不乱码
  • 缺点:英文也占 2 个字节,太浪费空间

4. UTF-8(最完美)

  • 英文:1 字节
  • 中文:3 字节
  • 省空间、不乱码、全世界通用
  • 现在所有地方都用 UTF-8

二、Python 字符串核心(最重要)

Python 3 里有两种东西:

  1. str:内存里的字符串(Unicode,能显示中文)
  2. bytes:字节(用来存文件、发网络)

两个关键动作

  • str → bytes:编码 encode('utf-8')
  • bytes → str:解码 decode('utf-8')

例子:

'中文'.encode('utf-8')  # 变成字节
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')  # 变回文字

三、字符串格式化(就是 “填空”)

Python 有 3 种写法,最简单的是 f-string

1. f-string(最推荐)

name = "小明"
score = 95.5
print(f"{name} 的分数是 {score:.1f} 分")

输出:

plaintext

小明 的分数是 95.5 分

2. % 写法

print("%s 的分数是 %.1f 分" % (name, score))

3. format 写法

print("{0} 的分数是 {1:.1f} 分".format(name, score))

四、你要的练习题答案

题目:

小明去年 72 分,今年 85 分,求提升的百分点,显示成 xx.x%

代码

s1 = 72
s2 = 85

# 计算提升百分比
r = (s2 - s1) / s1 * 100

# 输出,保留1位小数
print(f'成绩提升了 {r:.1f}%')

运行结果

plaintext

成绩提升了 18.1%

五、超简总结(背会这几句就够)

  1. 编码 = 文字转数字

  2. 统一用 UTF-8 永远不乱码

  3. Python:

    • str 是文字
    • bytes 是字节
    • encode 编码,decode 解码
  4. 格式化字符串用 f-string 最简单

====分割线=3种写法(字符串格式化)

字符串格式化(就是 “填空”)

Python 有 3 种写法,最简单的是 f-string

1. f-string(最推荐)

name = "小明"
score = 95.5
print(f"{name} 的分数是 {score:.1f} 分")

输出:

plaintext

小明 的分数是 95.5 分

2. % 写法

print("%s 的分数是 %.1f 分" % (name, score))

3. format 写法

print("{0} 的分数是 {1:.1f} 分".format(name, score))

==分割线=1=f-string写法

1. 先告诉你:f-string 到底在干嘛

f"..." 就是告诉 Python:

这里面 { } 包起来的是变量,不是普通文字

所以结构只有两步:

  1. 字符串前面加个 f

  2. 变量用 { } 包起来

就这两个规则,没有别的。

print(f"{name}的分数是{score}分")

这就够你用 90% 的场景了。

实例记忆:(重点)

print(f"{name}的分数是{score}")

f"" f_string,可控制保留几位小数 {} 变量

.1f 保留1位小数,score:.1f

=分割线2===%写法

%写法

这个叫 % 格式化,写法规则超级固定,我一步步拆开给你看,一看就会。

1. 整句拆开

print("%s 的分数是 %.1f 分" % (name, score))

分成三部分:

  1. "字符串内容"
  2. %
  3. (变量1, 变量2)

2. 里面的符号是什么意思?

  • %s = 放字符串(文字、名字之类)
  • %d = 放整数
  • %.1f = 放小数,保留 1 位

对应关系:

plaintext

%s   → name
%.1f → score

3. 最简单记忆法

  • 想放名字 / 文字 → 写 %s
  • 想放数字 → 写 %d
  • 想放小数并保留 1 位 → 写 %.1f

然后:

  • 引号后面写一个 %
  • 括号里按顺序放变量:(变量1, 变量2)

4. 对应到你的例子

name = "小明"
score = 95.5

print("%s 的分数是 %.1f 分" % (name, score))

输出:

plaintext

小明 的分数是 95.5 分

5. 再给你一个超短模板(背这个就行)

print("%s xxx %s xxx" % (变量1, 变量2))

分割线3format 写法

1. 整句长这样

print("{0} 的分数是 {1:.1f} 分".format(name, score))

2. 拆成两部分看

  1. 前面字符串:"{0}...{1}"
  2. 后面 .format(变量1, 变量2)

3. 规则只有 2 条

  1. {0} 对应 format 里第 1 个变量

  2. {1} 对应 format 里第 2 个变量

    (从 0 开始数:0、1、2、3……)


4. 对应关系

"{0}   的分数是 {1:.1f} 分".format(name, score)

{0} → name
{1} → score

5. .1f 意思一样

  • {1:.1f} = 第 2 个变量,保留 1 位小数

6. 最简单模板

print("{0}...{1}...".format(变量1, 变量2))

7. 三种写法对比(帮你彻底理清)

# 1. f-string(最简单,推荐)
print(f"{name} 的分数是 {score:.1f} 分")

# 2. format 写法(老一点,也常用)
print("{0} 的分数是 {1:.1f} 分".format(name, score))

# 3. % 写法(更老)
print("%s 的分数是 %.1f 分" % (name, score))

====分割线练习题1

分割线=练习题1

已知:

name = "小红"
age = 16

要求:

输出:

plaintext

小红今年16岁

答案:

f-string写法:print(f"{name}今年{age}岁")

%写法:print(“%S今年%d岁” % (name,age)) 注意:没有逗号,用%隔开

分割线=练习题2

现在来做第二题

height = 1.68

要求输出:

身高:1.7米

答案:

f-string写法:

❌️f-string:print(f"身高:{height:1.f}米")----保留小数那里写错了,应该是:.1f,而不是:1.f

❌️print{f"身高:{height:.1f}米"}–print后不能用大括号{},得用()

✅️print(f"身高:{height:.1f}米")

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐