Skip to content

第5周:第二次上机课(完整版) ​

本次上机课讲评 py 作业 1、py 练习 1、py 作业 2、py 练习 2,共 24 题。

课堂精简版:只讲输入、输出与舍入 →

知识点完整讲解 ​

展开六个知识点:输入、float、输出、round、乘方、字符串

一、input():先读一行,再拆分和转换 ​

PPT:第1章第27页;第2章第32、35、46–47、50页。

1. 一次 input() 读取一行,得到字符串 ​

对应题目:py 练习 1 · 01 基础输入输出练习-01。

python
s = input()       # 输入 1,得到字符串 "1"
n = int(s)        # 转成整数 1
print(n + 1)      # 输出 2

也可以写成 n = int(input())。这里先调用 input(),再把它的返回值交给 int()。

写法得到什么例子
input()一行字符串,去掉行尾换行符输入 12,得到 "12"
int(s)整数int("12") 得到 12
float(s)浮点数float("3.4") 得到 3.4
str(n)数字的字符串表示str(12) 得到 "12"
type(x)查看对象的类型type("12") 是 str

input() 不会自动判断数字,也不会自动去掉这一行两端的空格。input("请输入:") 会额外输出提示文字,在 OJ 上使用不带提示的 input()。

python
a = input()       # 输入 3,得到 "3"
b = input()       # 输入 6,得到 "6"
print(a + b)      # 输出 36,字符串的 + 是拼接
2. 多行输入:每行分别调用 input() ​

对应题目:py 作业 1 · 01 两整数求和。

text
3
6
python
a = int(input())
b = int(input())
print(a + b)      # 9

两次 input() 按顺序读取两行。不能用一次 input().split() 去读取第二行;多写一次 input() 也会尝试读取并不存在的下一行。

计算两点之间距离同样逐行读取,顺序是 x1、y1、x2、y2,共四次。

3. 一行多个数:split() 先拆开,转换再逐项进行 ​

对应题目:py 作业 2 · 03 求三个数的和。输入 1 2.3 4.7。

python
line = input()            # "1 2.3 4.7"
parts = line.split()      # ["1", "2.3", "4.7"]
a, b, c = parts           # 分别得到三个字符串
x = float(a)
y = float(b)
z = float(c)
print(x + y + z)          # 8.0

split() 是字符串的方法,返回一个列表,列表里的每一项仍是字符串。a, b, c = parts 把三个元素分别赋给三个变量,元素个数必须匹配。

python
numbers = float(input().split())

float() 能转换一个数字字符串,不能直接把整个列表转换成一个浮点数。

批量转换也可以写成:

python
x, y, z = map(float, input().split())
print(x + y + z)

map(float, ...) 对每一项分别调用 float。第一个参数写函数名 float,不是 float()。PPT:第4章第18页。

4. 空白分隔和指定分隔符有什么不同 ​

对应题目:py 作业 2 · 04 计算句子中的单词个数。

python
sentence = input()
words = sentence.split()
print(len(words))

输入 teacher assistance is so handsome,拆成 5 个单词,输出 5。

表达式结果
" a b ".split()["a", "b"]
"a b".split(" ")["a", "", "b"]
"12,34,56".split(",")["12", "34", "56"]
"0:1:40".split(":")["0", "1", "40"]

无参数的 split() 按连续空白拆分,忽略首尾空白,空格和制表符都能作为分隔。指定 "," 或 ":" 时,只按指定字符串拆分,连续分隔符之间可能得到空字符串。

逗号输入是对“求三个数的和”的课堂改写示例,原题使用空白分隔:

python
x, y, z = input().split(",")  # 示例输入:1,2.3,4.7
print(float(x) + float(y) + float(z))
5. 混合行、混合类型,分别处理 ​

对应题目:py 练习 2 · 01 基础输入输出练习-04。输入第一行 1.0,第二行 2 3。

python
a = float(input())
b, c = input().split()
b = int(b)
c = int(c)
print(f"{(a + b + c) / 3:.2f}")  # 2.00

对应题目:py 练习 2 · 02 基础输入输出练习-05。输入 8 1.5 apple,三个字段的类型各不相同。

python
a, b, word = input().split()
a = int(a)
b = float(b)
print(a % 7, f"{b * 3:.3f}", word[-1])  # 1 4.500 e

字符串 word 保持字符串类型;这一行不能统一用 map(float, ...),因为 apple 不是数字。

二、float:数字的类型与近似表示 ​

PPT:第2章第5–8、13、46–47页。

对应题目:简单的A*B问题、求三个数的和、计算两点之间距离。

1. int、float、str 的计算不同 ​
表达式结果原因
"3" + "4""34"字符串拼接
int("3") + int("4")7整数相加
float("3") + float("4")7.0浮点数相加
float("3.4")3.4可以读取带小数点的数字
int("3.4")抛出 ValueError字符串不是合法的整数写法
int(3.9)3浮点数转整数,去掉小数部分
int(-3.9)-3向零截断,不是向下取整

“求三个数的和”允许整数或小数输入,全部用 float() 读取。整数形式的字符串 "1" 也能转换成 1.0,结果为整数值时会显示 8.0;不能为了去掉 .0 再转成 int。

2. 浮点数不等于精确的十进制小数 ​
python
print(0.1 + 0.2)        # 0.30000000000000004
print(f"{0.1 + 0.2:.2f}")  # 0.30

许多十进制小数无法用有限位二进制精确表示,float 保存的是近似值。多出的小数尾巴通常来自表示误差,不是加法公式写错。

对应题目:py 作业 2 · 01 小树生长。先按公式计算,最后按题目要求处理结果。不要在每个月的中间计算中反复 round,否则可能累积舍入误差。

python
height = float(input())
h1 = height + 0.1 * 12
h2 = height * 1.1 ** 12
print(round(h1, 1))
print(round(h2, 2))

三、print():分隔符、行尾与格式化 ​

PPT:第1章第28页;第2章第36–40页。

1. sep 控制多个输出项之间放什么 ​

print(a, b, c, sep=" ", end="\n") 默认在各项之间放一个空格,末尾换行。sep 和 end 都通过参数名指定。

对应题目:py 作业 2 · 02 秒转时分秒。

python
sec = int(input())
h = sec // 3600
m = sec % 3600 // 60
s = sec % 60
print(h, m, s, sep=":")  # 输入 100,输出 0:1:40
写法(h=0,m=1,s=40)输出
print(h, m, s)0 1 40
print(h, m, s, sep=":")0:1:40
print(h, m, s, sep="")0140
print(h, ":", m, ":", s)0 : 1 : 40

最后一种写法仍使用默认空格,会在冒号两侧多输出空格。sep 只放在输出项之间,不加在开头或末尾。

2. end 控制本次 print 之后是否换行 ​

对应题目:py 练习 2 · 07 分离整数的各个数位。

python
s = input()       # 输入 123
print(s[0])
print(s[1])
print(s[2])

每次默认换行,因此输出三行。也可以 print(s[0], s[1], s[2], sep="\n")。

把输出拆成多次调用、但保持同一行时,可以用 end:

python
print("0", end=":")
print("1", end=":")
print("40")

这三次调用合起来输出 0:1:40,最后一次才换行。end="" 表示不追加字符;end=" " 表示追加一个空格;print() 不给输出项时会输出一个换行。

3. f-string:把表达式和格式写在字符串里 ​

对应题目:py 作业 1 · 02 简单的A*B问题。输入两行 1、3.4,输出 3.40。

python
a = float(input())
b = float(input())
result = a * b
print(f"{result:.2f}")

f 紧贴引号,{} 内写变量或表达式;冒号后面是格式说明。

写法含义示例结果
f"{3.4}"默认显示3.4
f"{3.4:.2f}"定点显示,小数点后 2 位3.40
f"{3.4:.3f}"小数点后 3 位3.400
f"{7:03d}"整数宽度至少为 3,不足补零007
f"{3.4:8.2f}"总宽度至少为 8,小数点后 2 位,默认右对齐前面 4 个空格,再接 3.40

.2f 的 2 是小数位数,8.2f 的 8 是整个字段的最小宽度。f"{x:2f}" 没有小数点,不表示保留两位小数。

花括号里也能直接计算:print(f"{a * b:.2f}")。不带开头的 f,"{a * b:.2f}" 只是一段普通文字。

4. format()、百分号格式与字符串拼接 ​

“简单的A*B问题”中,下面四种写法都能把 3.4 显示成 3.40:

python
print(f"{result:.2f}")
print("{:.2f}".format(result))
print(format(result, ".2f"))
print("%.2f" % result)

它们都生成格式化后的字符串。课堂中优先掌握 f-string,遇到参考答案中的 .format() 和 % 时能够读懂即可。

“秒转时分秒”还可以写成:

python
print(f"{h}:{m}:{s}")
print("{}:{}:{}".format(h, m, s))
print(str(h) + ":" + str(m) + ":" + str(s))

拼接时各项都要是字符串;h + ":" 会因为整数和字符串不能直接相加而报错。本题输出 0:1:40,没有要求补成 00:01:40。

5. 空格也是输出的一部分 ​

对应题目:py 作业 1 · 05 字符菱形。

python
c = input()
print("  " + c)
print(" " + c * 3)
print(c * 5)
print(" " + c * 3)
print("  " + c)

print(" ", c) 会在两个输出项之间再加默认空格,比 print(" " + c) 多出一个空格;也可以用 print(" ", c, sep="")。

四、round() 与 f-string:数值舍入和显示位数 ​

PPT:第2章第19、36–39页。

对应题目:简单的A*B问题、计算三角形的周长和面积、小树生长。

1. round 返回数值,f-string 返回字符串 ​
表达式结果类型
round(3.4, 2)3.4float
f"{3.4:.2f}""3.40"str
round(6.0, 2)6.0float
f"{6.0:.2f}""6.00"str
round(3.456, 2)3.46float
f"{3.456:.2f}""3.46"str

round(x, 2) 得到舍入后的数字,不负责补齐末尾零;f"{x:.2f}" 按固定两位小数生成文本,也不会修改原变量 x。

python
x = 3.4
rounded = round(x, 2)
text = f"{x:.2f}"
print(rounded + 1)    # 4.4,可以继续参与数值计算
print(text + "元")    # 3.40元,字符串拼接
2. 用三角形题同时比较两种输出 ​

原题提示指定周长用 f-string、面积用 round;三边 3、4、5 对应输出 12.00 和 6.0。

python
a = float(input())
b = float(input())
c = float(input())
perimeter = a + b + c
p = perimeter / 2
area = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print(f"{perimeter:.2f}")
print(round(area, 2))

乘法题要求固定两位小数,print(round(a * b, 2)) 在结果为 3.4 时不能输出 3.40。不要根据一次样例的外观,把这两种写法当作始终等价。

3. “四舍五入”在 Python 中的边界 ​
python
print(round(2.5))     # 2
print(round(3.5))     # 4
print(round(2.675, 2))  # 2.67

精确处在中点时,round 采用取偶数的舍入规则;十进制输入的浮点数还可能并非精确中点。格式化浮点数也受其实际存储值影响,f"{2.675:.2f}" 同样是 "2.67"。不能把所有边界理解为“十进制下一位是 5 就一定进位”。

五、乘方、平方、立方与开根号 ​

PPT:第2章第14–15、18–19、20–21页;第5章第24–25页。

1. 乘方用 **,不是 ^ ​

对应题目:py 练习 2 · 04 计算2的幂。

python
n = int(input())
print(2 ** n)        # 输入 3,输出 8
计算Python 写法示例
平方x ** 2 或 x * x3 ** 2 是 9
立方x ** 33 ** 3 是 27
n 次方x ** n 或 pow(x, n)pow(2, 3) 是 8
非负数的平方根x ** 0.5 或 math.sqrt(x)9 ** 0.5 是 3.0
正数的立方根x ** (1 / 3)8 ** (1 / 3) 是 2.0

^ 是整数的按位异或,2 ^ 3 得到 1。计算整数幂时,2 ** n 返回整数;math.pow(2, n) 返回浮点数,本题使用前者即可。

2. 根号和括号:整个表达式一起开方 ​

对应题目:py 作业 1 · 04 计算两点之间距离。

python
x1 = float(input())
y1 = float(input())
x2 = float(input())
y2 = float(input())
distance = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
print(f"{distance:.2f}")

输入 0、0、3、5(四行),得到 5.83。括号分别包住坐标差、两项平方的和。

也可以导入数学模块:

python
import math

distance = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)

import math 后调用 math.sqrt(...);若使用 from math import sqrt,则调用 sqrt(...)。

python
value = 9
print(value ** 1 / 2)  # 4.5,先算 value ** 1,再除以 2
print(value ^ 2)       # 11,不是平方

value ** (1 / 2) 才是平方根。-3 ** 2 是 -(3 ** 2),结果为 -9;(-3) ** 2 才是 9。

3. 乘方表示重复按比例增长 ​

对应题目:py 作业 2 · 01 小树生长。

python
h1 = height + 0.1 * 12
h2 = height * 1.1 ** 12

每月固定长高 0.1 米,12 个月增加 1.2 米;每月长高当月高度的 10%,则每个月乘 1.1,连续 12 个月就是乘 1.1 ** 12。height * (1 + 0.1 * 12) 没有表达逐月变化的增长基数。

大象喝水中的圆桶体积 3.14159 * r ** 2 * h 也用到平方;桶数还需向上取整,完整分析见完整版。

六、字符串:索引、切片、拼接和方法 ​

PPT:第2章第23–35、41–44、50–51页。

1. 字符串保留字符,数字用于计算 ​

对应题目:py 作业 2 · 05 反向输出一个三位数。

python
s = input()         # "100"
print(s[::-1])      # 001

"001" 是三个字符,int("001") 是整数 1。本题要保留反向后的三个字符,因此不要把反向结果再转成整数。

2. 索引从 0 开始,负下标从末尾开始 ​

对应题目:py 练习 2 · 03 基础输入输出练习-07,以及练习-05中的最后一个字符。

字符串 s = "123abc"123abc
正下标012345
负下标-6-5-4-3-2-1
python
print(s[5])       # c,第6个字符
print(s[-1])      # c,最后一个字符
print(len(s))     # 6,字符个数

s[6] 会越界。下标不是“第几个”的自然语言编号,要先减 1。

3. 切片左端包含,右端不包含 ​

s[start:stop:step] 按步长取字符,包含起始位置,不包含结束位置。

python
s = "123abc"
print(s[3:6])     # abc,第4到第6个字符
print(s[:2])      # 12,前两个字符
print(s[2:])      # 3abc,从第3个到末尾
print(s[::2])     # 13b,隔一个取一个
print(s[::-1])    # cba321,倒序

对应“基础输入输出练习-07”的完整写法:

python
a = input()
b = input()
print(a[5])
print(b[3:6])
4. 拆出数字片段,再转换和计算 ​

对应题目:py 作业 2 · 06 字符串中的整数求和。

python
a, b = input().split()       # 输入 12B 34D
x = int(a[:2])               # "12" → 12
y = int(b[:2])               # "34" → 34
print(x + y)                 # 46

操作顺序是:读整行 → 拆成两个字符串 → 各取前两个字符 → 转整数 → 相加。直接 int(a) 会尝试转换 "12B",而 a[:2] + b[:2] 得到字符串 "1234"。

5. + 拼接、* 重复,字符串不能原地改字符 ​

对应题目:py 练习 2 · 09 字符串交换,以及字符菱形。

python
a = input()              # ABCD
b = input()              # 1234
new_a = b[:2] + a[2:]     # 12CD
new_b = a[:2] + b[2:]     # AB34
print(new_a)
print(new_b)

字符串不可变,不能写 a[0] = "X"。交换时先从两个原字符串构造新结果;若先覆盖 a,再用新的 a 构造 b,就丢失了原来的前缀。

"*" * 3 得到 "***"," " * 2 得到两个空格;这就是字符菱形中重复字符与缩进的来源。

6. upper、lower、swapcase 返回新字符串 ​

对应题目:py 练习 2 · 10 字符串大小写转换。

python
s = input()      # aBa
result = s[0].upper() + s[1].lower() + s[2].upper()
print(result)    # AbA

也可以 print(s.swapcase()),把大小写分别反转。

表达式(s="aBa")结果
s.upper()"ABA"
s.lower()"aba"
s.swapcase()"AbA"
python
s = "aBa"
s.upper()        # 返回新字符串,但没有保存
print(s)         # 仍然是 aBa

需要 s = s.upper() 或 print(s.upper())。s.upper 是方法本身,s.upper() 才是调用方法。

7. ord、chr:字符与编码,以及循环字母表 ​

对应题目:py 作业 2 · 07 字母加密。PPT:第2章第29、43–44页。

python
letter = input()
n = int(input())
index = ord(letter) - ord("a")
new_index = (index + n) % 26
print(chr(ord("a") + new_index))

ord("a") 是 97,chr(97) 是 "a";先减去 ord("a"),得到 0~25 的字母位置。加密后取 % 26,再转回字符。

输入 z 和 1,位置从 25 变为 (25 + 1) % 26 = 0,输出 a;输入 a 和 27,输出 b。只写 chr(ord(letter) + n) 没有处理字母表末尾的循环。

也可以直接索引字符串:

python
alphabet = "abcdefghijklmnopqrstuvwxyz"
letter = input()
n = int(input())
index = alphabet.index(letter)
print(alphabet[(index + n) % 26])
8. 把固定宽度的字符串当作对应表 ​

对应题目:py 练习 2 · 06 数字转星期。PPT:第2章第41–42页。

python
n = int(input())
week = "MonTueWedThuFriSatSun"
start = (n - 1) * 3
print(week[start:start + 3])

每个星期缩写占 3 个字符。输入 3,起始位置为 6,取 [6:9] 得到 Wed。这将“编号从 1 开始”转换成“下标从 0 开始”,再利用等宽切片查表。

一、py 作业 1 ​

01 · 两整数求和 ​

提交结果分布共 124 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。

提交中出现的错误与定位

  • 把两行输入当作同一行读取,或多读第三个数,会与输入契约冲突。
  • 出现提交了三数求和等其他题代码、求平均值、输出算式或提示文字的情况。
  • 出现 Python 2 的 print 写法、缺括号、= 与 == 混用;还有 Python 代码选择 G++ 提交。

错误写法 1:把两行当成一行

python
a, b = map(int, input().split())
print(a + b)

修改: 分别用两次 input() 读入。

错误写法 2:读了不存在的第三个数

python
a = int(input())
b = int(input())
c = int(input())
print(a + b + c)

修改: 本题只读两个数,删除第三次输入与第三个加数。

错误写法 3:输出了提示和算式

python
a = int(input("请输入数字:"))
b = int(input())
print("和为", a + b)

修改: input 不带提示,print 只输出结果。

错误写法 4:Python 2 的 print 写法

python
a = int(input())
b = int(input())
print a + b

修改: Python3 使用 print(a + b);同时检查提交语言。

正确方法 · 参考答案(徐志衡)

将两行输入转成整数后相加。

python
a = int(input())
b = int(input())
c = a + b
print(c)

同学的不同 AC 方法

逐步转换、保存和

对应知识/PPT: 第1章27–28页;第2章35、46–47页。

最便于追踪类型与中间结果。

python
a = int(input())
b = int(input())
total = a + b
print(total)
直接输出表达式

对应知识/PPT: 同上。

计算相同,代码更短;读入顺序仍然是两行。

python
print(int(input()) + int(input()))
eval 解析输入

对应知识/PPT: 课程外写法。

本题只需 int;eval 会解释表达式,没必要引入额外语义。

python
a=eval(input())
b=eval(input())
print(a+b)

02 · 简单的A*B问题 ​

提交结果分布共 149 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 用 int 读取小数,或只把其中一个数转换为数值。
  • 直接打印乘积或 round 的结果,末尾零不能补齐;出现把 3.4 写死、打印两遍结果、多加 A*B= 等文字。
  • 格式串中 :2f 与 :.2f 混淆,f 与引号分离、中文标点、拼错 float;正数前多出符号占位空格。

错误写法 1:用整数类型读取小数

python
a = int(input())
b = float(input())
print(f"{a * b:.2f}")

修改: 两个字段都用 float 读取。

错误写法 2:round 不补齐末尾零

python
a = float(input())
b = float(input())
print(round(a * b, 2))

修改: 改成固定两位格式 f"{a*b:.2f}"。

错误写法 3:格式宽度误写成小数精度

python
a = float(input())
b = float(input())
print(f"{a * b:2f}")

修改: 2f 是宽度写法,这里应为 .2f。

错误写法 4:把演示值写死或打印两遍

python
value = 3.4
print(value)
print(f"{value:.2f}")

修改: 演示代码不能直接作为提交;读入两数相乘,输出一次。

正确方法 · 参考答案(徐志衡)

将输入转成浮点数,相乘后保留两位小数。

python
a = float(input())
b = float(input())
c = a * b
print(f'{c:.2f}')

同学的不同 AC 方法

f 字符串

对应知识/PPT: 第2章38–39页。

直接明确两位小数。

python
A=float(input())
B=float(input())
print(f"{A*B:.2f}")
str.format

对应知识/PPT: 第2章38–39页。

与 f 字符串的格式说明相同。

python
a = float(input())
b = float(input())
res = a * b
print("{0:.2f}".format(res))
先保存格式化字符串

对应知识/PPT: 第2章5、38页。

格式化的结果是 str;不必再转回 float。

python
c = float(input())
d = float(input())
e = f"{c * d:.2f}"
print(e)
列表推导式读两行

对应知识/PPT: 第3章15–16页;第6章列表(后续)。

观察到的简写,本题两次 input 更直观。

python
a, b = [float(input()) for _ in [0, 0]]
print(f"{a * b:.2f}")

03 · 计算三角形的周长和面积(基础版) ​

提交结果分布共 300 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
开平方与数学库第2章,第15、18页;第5章,第24–25页(后续展开)整个非负表达式开平方,可用 math.sqrt(value) 或 value ** 0.5;** 1 / 2 不等于平方根。
模块导入与 math 调用第1章,第23–26页;第5章,第3–5页(后续展开)import math 后用 math.sqrt;from math import sqrt 后用 sqrt,名称不能混用。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。

提交中出现的错误与定位

  • 把周长当半周长,或用 // 2 截断半周长;部分代码仅对最后一项开方,或用 ** 1 / 2。
  • 省略乘号,把 p(p-a) 当函数;用 []、{} 代替括号参与运算;漏 import、sqrt 拼错、函数没有返回计算值。
  • 输出半周长、额外第三行、同一行两个结果;面积强行 .1f 或 .2f,与本题样例和当前 AC 写法不一致。

错误写法 1:半周长被整除截断

python
p = (a + b + c) // 2
area = (p * (p-a) * (p-b) * (p-c)) ** 0.5

修改: 改用 / 2,让奇数周长的半周长保留 .5。

错误写法 2:平方根的作用范围错误

python
area = p * (p-a) * (p-b) * (p-c) ** 0.5
area = (p * (p-a) * (p-b) * (p-c)) ** 1 / 2

修改: 两行分别代表两种观察到的误写;用整个乘积 ** 0.5。

错误写法 3:省略了乘号或误用括号

python
area = (p(p-a)(p-b)(p-c)) ** 0.5
area = [p * (p-a) * (p-b) * (p-c)] ** 0.5

修改: 每项间写 *,算式用圆括号;列表不能直接做平方根。

错误写法 4:函数名和导入没有配套

python
area = math.sqrt(p * (p-a) * (p-b) * (p-c))

修改: 使用 math.sqrt 前要 import math;也可直接 ** 0.5。

错误写法 5:面积输出规则照搬固定精度

python
print(f"{perimeter:.2f}")
print(f"{area:.2f}")

修改: 按当前题面提示,第二行使用 print(round(area, 2))。

正确方法 · 参考答案(徐志衡)

周长是三边之和;面积用海伦公式计算,并按题面格式输出。

python
a = int(input())
b = int(input())
c = int(input())
x = float(a + b + c)
print(f'{x:.2f}')
p = x / 2
y = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print(round(y, 2))

同学的不同 AC 方法

math.sqrt 海伦公式

对应知识/PPT: 第1章26页;第5章25页。

导入模块,公式含义清楚。

python
import math
a = float(input())  
b = float(input())  
c = float(input())  
x = a + b + c  
p = x / 2      
y = math.sqrt(p * (p - a) * (p - b) * (p - c)) 
print(f"{x:.2f}")
print(round(y, 2))
幂运算开平方

对应知识/PPT: 第2章15、18页。

无须导入;括号必须覆盖整个乘积。

python
a = float(input())
b = float(input())
c = float(input())
x = a + b + c
s = x / 2
y = (s * (s-a) * (s-b) * (s-c)) ** 0.5
print(f"{x:.2f}")
print(round(y, 2))
math.pow 开平方

对应知识/PPT: 第2章19–21页;第5章25页。

同一数学模型的函数写法。

python
a=int(input())
b=int(input())
c=int(input())
x=a+b+c
print(f"{x:.2f}")
import math
p=(a+b+c)/2
y=math.pow((p*(p-a)*(p-b)*(p-c)),1/2)
print(round(y,2))
先判断三角形再算

对应知识/PPT: 第2章16–17页;第3章5–8页。

题目保证可构成三角形,这个判断不是必需。

python
a=float(input())
b=float(input())
c=float(input())
x=a+b+c
p=x/2
y=(p*(p-a)*(p-b)*(p-c))**0.5
if a+b>c and a+c>b and b+c>a:
    print(f"{x:.2f}")
    print(round(y,2))
else:
    print("输入错误")
复数构造求面积

对应知识/PPT: 课程外扩展。

AC 中确实存在;不列为基础课要求,优先海伦公式。

python
from cmath import sqrt
a, b, c = [int(input()) for _ in [1,2,3]]
print(f"{a + b + c:.2f}")
a, b, c = sorted([a, b, c])
print(round(abs((b * ((b*b + c*c - a*a) / (2*b) + 1j*sqrt(c*c - ((b*b+c*c-a*a)/(2*b))**2))).imag) / 2, 2))

04 · 计算两点之间距离 ​

提交结果分布共 127 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
开平方与数学库第2章,第15、18页;第5章,第24–25页(后续展开)整个非负表达式开平方,可用 math.sqrt(value) 或 value ** 0.5;** 1 / 2 不等于平方根。
模块导入与 math 调用第1章,第23–26页;第5章,第3–5页(后续展开)import math 后用 math.sqrt;from math import sqrt 后用 sqrt,名称不能混用。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。

提交中出现的错误与定位

  • 按 x1、x2、y1、y2 读取,坐标配对错误;用 int 读取实数,或把输入当成两行坐标。
  • 把两个平方相减,可能开方负数;出现 y1-y1、变量名称错配、漏导入 math。
  • 直接输出 round 或默认浮点数,未补齐两位;出现前导空格。

错误写法 1:坐标读取顺序错位

python
x1 = float(input())
x2 = float(input())
y1 = float(input())
y2 = float(input())

修改: 第 2、3 行应分别是 y1、x2。

错误写法 2:平方和写成差或变量写错

python
d = ((x1-x2)**2 - (y1-y2)**2) ** 0.5
d = ((x1-x2)**2 + (y1-y1)**2) ** 0.5

修改: 分别是两种错误片段;平方项要相加,纵坐标差是 y1-y2。

错误写法 3:小数读取与显示不符

python
x1 = int(input())
print(round(distance, 2))

修改: 输入坐标用 float,输出固定两位用格式化;两行来自不同错误类型。

正确方法 · 参考答案(徐志衡)

使用两点距离公式,注意四行输入依次为 x1、y1、x2、y2。

python
x1 = float(input())
y1 = float(input())
x2 = float(input())
y2 = float(input())
d = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
print(f'{d:.2f}')

同学的不同 AC 方法

math.sqrt 距离公式

对应知识/PPT: 第1章26页;第2章15页;第5章25页。

先保存 dx、dy 最适合讲解坐标对应。

python
import math
x1=float(input())
y1=float(input())
x2=float(input())
y2=float(input())
l= math.sqrt((x2-x1)**2+(y2-y1)**2)
print(f"{l:.2f}")
幂运算或 math.pow

对应知识/PPT: 第2章15、19页。

平方可用乘法或幂,开平方对象必须是平方和。

python
x1=float(input())
y1=float(input())
x2=float(input())
y2=float(input())
dx=x1-x2
dy=y1-y2
d=(dx**2+dy**2)**0.5
print(f"{d:.2f}")
python
import math
a=float(input())
b=float(input())
c=float(input())
e=float(input())
d=math.sqrt(math.pow(a-c,2)+math.pow(b-e,2))
print(f"{d:.2f}")
先取绝对值再平方

对应知识/PPT: 第2章19页。

可行,但平方已消去符号,abs 是多余步骤。

python
x1=float(input())
y1=float(input())
x2=float(input())
y2=float(input())
x=abs(x1-x2)
y=abs(y1-y2)
s=x**2+y**2
m=s**0.5
print(f"{m:.2f}")
math.dist / 复数模

对应知识/PPT: 课程外扩展。

两类都在 AC 中出现,不要求为本题另学高级表示。

python
import math
x1, y1, x2, y2 = [float(input()) for _ in range(4)]
euclidean_distance = math.dist((x1, y1), (x2, y2))
print(f"{euclidean_distance:.2f}")
python
a, b, c, d = [float(input()) for _ in range(4)]
print(f"{abs((a + 1j * b) - (c + 1j * d)):.2f}")

05 · 字符菱形 ​

提交结果分布共 117 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
字符串方法与函数调用第2章,第30、32、34页s.upper()、s.lower()、s.split() 需要括号;方法返回新值,必须接住或直接用于表达式。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 把字符写死为 *;将空字符串 "" 当作一个空格,或前导空格数计算错误。
  • print 多参数的默认分隔符额外添空格;画成空心图案、少行、多空行或末行字符数错误。
  • 对字符串使用 ** 而非 *;循环或缩进语法错误。

错误写法 1:空串当成空格

python
c = input()
print("" + c)
print("" + c * 3)

修改: 首两行分别需要两个、一个前导空格。

错误写法 2:print 自动加入额外空格

python
c = input()
print("  ", c)
print(" ", c * 3)

修改: 用 + 拼好每行再 print,或明确 sep=""。

错误写法 3:把样例字符写死

python
print("  *")
print(" ***")
print("*****")
print(" ***")
print("  *")

修改: 读取字符并用于五行图案;仅对样例星号正确。

错误写法 4:重复字符串用了幂

python
c = input()
print(c ** 5)

修改: 字符串重复用 c * 5。

正确方法 · 参考答案(陈旭峥)

按每行 1、3、5、3、1 个字符输出菱形,并保留行首空格。

python
# Solution 2
c = input()
print("  " + c + "  ")
print(" " + c + c + c + " ")
print(c + c + c + c + c)
print(" " + c + c + c + " ")
print("  " + c + "  ")

同学的不同 AC 方法

五行拼接

对应知识/PPT: 第2章27、40页。

输入字符参与计算;最适合当前基础课。

python
c = input()
print('  ' + c)
print(' ' + c * 3)
print(c * 5)
print(' ' + c * 3)
print('  ' + c)
一次输出多行

对应知识/PPT: 第2章24、27、38页。

要区分字符串中的换行与 print 默认的末尾换行。

python
x=input()
print(f"  {x}\n {x}{x}{x}\n{x}{x}{x}{x}{x}\n {x}{x}{x}\n  {x}")
循环生成对称行

对应知识/PPT: 第2章19页;第3章15–16页。

从规律生成,适合后续扩展大小。

python
c = input()
n = 5
mid = n // 2 + 1
for i in range(1, n + 1):
    spaces = abs(mid - i)
    chars = n - 2 * spaces
    print(" " * spaces + c * chars)
center 居中

对应知识/PPT: 第2章31页。

会补两侧空格;本课参考代码只输出必要前导空格。

python
c = input()
for i in range(3):
    print((c * (2 * i + 1)).center(5))
for i in range(1, 3):
    print((c * (5 - 2 * i)).center(5))
模板替换或逐字符输出

对应知识/PPT: 第2章32页;第1章28页。

确有 AC;模板替换仍读取输入,区别于写死星号。

python
print("""  *
 ***
*****
 ***
  *""".replace("*", input()))
python
import sys
char = input().strip()
sys.stdout.write("  " + char + "\n")
sys.stdout.write(" " + char * 3 + "\n")
sys.stdout.write(char * 5 + "\n")
sys.stdout.write(" " + char * 3 + "\n")
sys.stdout.write("  " + char)

二、py 练习 1 ​

01 · 基础输入输出练习-01 ​

提交结果分布共 26 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。

提交中出现的错误与定位

  • 本次统计没有非 Accepted 提交,不能编造本题已发生的错误。课堂自查可比较 input()+1 的类型错误与 int(input())+1。

正确方法 · 参考答案(陈旭峥)

把输入转换为整数后加一输出。

python
n = int(input())
print(n + 1)

同学的不同 AC 方法

直接输出加一

对应知识/PPT: 第2章15页。

最直接。

python
a= int(input())
print(a+1)
保存新值

对应知识/PPT: 第2章5、49页。

便于观察计算结果。

python
a=int(input())
b=a+1
print(b)
更新原变量

对应知识/PPT: 第2章49页。

右边先求值,再重新绑定左边的变量。

python
n=int(input())
n=n+1
print(n)

02 · 基础输入输出练习-06 ​

提交结果分布共 37 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。

提交中出现的错误与定位

  • 把两行输入按一行两个字段读取;int(input) 缺调用括号,或未逐字段转换。
  • 商直接打印或使用 round;格式说明写到花括号外,或把 f 写进普通字符串;:. 2f 中多空格。
  • 用 abs(a-b) 丢失差的符号,或额外输出第六个数。

错误写法 1:格式说明放在花括号外

python
print(f"{a+b} {a-b} {a*b} {a/b}:.2f {a%b}")

修改: 商写成 {a/b:.2f},格式说明位于花括号内。

错误写法 2:缺少调用括号

python
a = int(input)
b = int(input)

修改: input() 才读取输入;input 本身是函数对象。

错误写法 3:取绝对值改变了差的含义

python
print(f"{a+b} {abs(a-b)} {a*b} {a/b:.2f} {a%b}")

修改: 第二项直接 a-b,不能消掉负号。

错误写法 4:错误的输入行数与额外输出

python
a, b = input().split()
a = int(a)
b = int(b)
print(a+b, a-b, a*b, a/b, a%b, f"{a/b:.2f}")

修改: 两行分别读取;只输出五项,商仅输出格式化版本。

正确方法 · 参考答案(陈旭峥)

分别计算和、差、积、商、余数;商按要求保留两位小数。

python
a = int(input())
b = int(input())
print("{} {} {} {:.2f} {}".format(a+b,a-b,a*b,a/b,a%b))

同学的不同 AC 方法

print 多参数

对应知识/PPT: 第1章28页;第2章38页。

利用默认 sep=" ",仅将商格式化为字符串。

python
a= int(input())
b= int(input())
print(a+b,a-b,a*b,f'{a/b:.2f}',a%b)
一条 f 字符串

对应知识/PPT: 第2章38–39页。

空格完全由格式串决定。

python
a=int(input())
b=int(input())
print(f"{a+b} {a-b} {a*b} {a/b:.2f} {a%b}")
format 或 % 格式化

对应知识/PPT: 第2章37–39页。

两种均在 AC 中出现;看懂即可,不必每种都背。

python
a = int(input())
b = int(input())
print("{} {} {} {:.2f} {}".format(a+b,a-b,a*b,a/b,a%b))
python
a=int(input())
b=int(input())
print('%d %d %d %.2f %d'%(a+b,a-b,a*b,a/b,a%b))

三、py 作业 2 ​

01 · 小树生长 ​

提交结果分布共 122 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。
模块导入与 math 调用第1章,第23–26页;第5章,第3–5页(后续展开)import math 后用 math.sqrt;from math import sqrt 后用 sqrt,名称不能混用。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 未把 input 转成数,额外读取月数;把复合增长中的乘法写成加法,或把指数写成 2。
  • 只输出一行、两个结果都一位小数;round 直接打印不补零,print(round(h2), 1) 又输出额外的 1。
  • 赋值写进 print、名称拼写错误、添加说明文字。

错误写法 1:复合增长用加法或错误指数

python
h2 = height + math.pow(1.1, 12)
h2 = height * pow(1.1, 2)

修改: 两种误写分别改成 height * 1.1**12。

错误写法 2:两个结果都只留一位

python
print(f"{h1:.1f}")
print(f"{h2:.1f}")

修改: 第二行要求两位,应为 :.2f。

错误写法 3:把精度当作 print 的第二个参数

python
print(round(height + 1.2, 1))
print(round(height * 1.1**12), 1)

修改: 这会额外输出 1;改为 print(f"{height*1.1**12:.2f}")。

错误写法 4:额外输出变量标签

python
print("h1:", round(h1, 1))
print("h2:", f"{h2:.2f}")

修改: 删除 h1:、h2:,保留两行数值。

正确方法 · 参考答案(徐志衡)

分别计算每月增加 0.1 米和每月增长 10% 时的一年后高度。

python
h = int(input())
h1 = h + 0.1 * 12
# **(幂运算)的运算符级别高于 *(乘法运算),因此不需要对幂运算使用括号
h2 = h * (1 + 0.1) ** 12
print(f'{h1:.1f}')
print(f'{h2:.2f}')

同学的不同 AC 方法

直接幂公式

对应知识/PPT: 第2章15、20–21页。

与 PPT 固定增长/比例增长模型对应。

python
a = float(input())
fixed = a+ 12 * 0.1
compound = a * (1.1 ** 12)
print(f"{fixed:.1f}")
print(f"{compound:.2f}")
math.pow / 内置 pow

对应知识/PPT: 第1章26页;第2章19–21页。

计算模型相同,调用方式不同。

python
import math  
height = int(input())
h1 = height + 0.1 * 12
h2 = height * math.pow(1.1, 12)
print(f"{h1:.1f}")
print(f"{h2:.2f}")
python
height=int(input())
h1=height+12*0.1
h2=height*pow(1.1,12)
print(f"{h1:.1f}")
print(f"{h2:.2f}")
逐月循环

对应知识/PPT: 第2章49页;第3章15–16页。

便于展示“每个月”的状态变化。

python
a=float(input())
b=a
for i in range(12):
    b+=0.1
c=a
for i in range(12):
    c*=1.1
print(f"{b:.1f}")
print(f"{c:.2f}")
round 后直接打印

对应知识/PPT: 第2章19、21页。

当前存在 AC,不能据此认为 round 总能补齐小数位。

python
import math
height = int(input())
h1 = height + 0.1 * 12
h2 = height * math.pow(1.1, 12)
h1 = round(h1, 1)
h2 = round(h2, 2)
print(h1)
print(h2)

02 · 秒转时分秒 ​

提交结果分布共 84 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。

提交中出现的错误与定位

  • 小时用 / 得到浮点数;分钟用 total//60 而没有再对 60 取余;秒数减错变量。
  • print(h, ":", m, ":", s) 带额外空格,或直接用空格输出;多读不存在的输入。
  • 格式串参数书写错误或变量未定义。

错误写法 1:小时浮点数或分钟超过 59

python
h = total / 3600
m = total // 60
s = total % 60

修改: 小时用 //,分钟还需 %60。

错误写法 2:冒号两侧出现空格

python
print(h, ":", m, ":", s)

修改: 用 f 字符串,或 print(h,m,s,sep=":")。

正确方法 · 参考答案(徐志衡)

用整除和取余依次求小时、分钟、秒。

python
a = int(input())
h = a // 3600
m = (a % 3600) // 60
s = a % 60
print(f'{h}:{m}:{s}')

同学的不同 AC 方法

先小时再剩余分钟

对应知识/PPT: 第2章15页。

按单位逐层分解。

python
sec = int(input())
h = sec // 3600
m = (sec % 3600) // 60
s = sec % 60
print("{0}:{1}:{2}".format(h, m, s))
先总分钟再小时

对应知识/PPT: 第2章15页。

先去掉秒,再拆分分钟。

python
sec=int(input())
m=sec//60
s=sec%60
h=m//60
m=m%60
print('{0}:{1}:{2}'.format(h,m,s))
减掉已分配时间

对应知识/PPT: 第2章15页。

余数也可用减法解释。

python
sec=int(input())
h=sec//3600
m=(sec-h*3600)//60
s=sec-h*3600-m*60
print('{0}:{1}:{2}'.format(h,m,s))
divmod 配对求商余

对应知识/PPT: 第2章19、50页。

一并返回商和余数。

python
sec=int(input())
h,a=divmod(sec,3600)
m,s=divmod(a,60)
print(f"{h}:{m}:{s}")
输出分隔符选择

对应知识/PPT: 第1章28页;第2章38页。

三类均通过,冒号之间不加空格。

python
t = int(input())
h = t // 3600
m = t % 3600 // 60
s = t % 60
print(f"{h}:{m}:{s}")
python
sec = int(input())
h = sec // 3600
m = (sec % 3600) // 60
s = sec % 60
print("{0}:{1}:{2}".format(h, m, s))
python
sec=int(input())
hour=sec//3600
min=(sec-hour*3600)//60
sec=sec-hour*3600-min*60
print(hour,min,sec,sep=":")

03 · 求三个数的和 ​

提交结果分布共 362 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
批量转换的可选简写第4章,第18页(后续系统讲解)map(int/float, iterable) 第一个参数是函数,第二个是可迭代对象;本课可先逐项转换,不以 map 作为前置要求。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 改成读三行;int 不能读取小数;float(列表)、map 参数或 input().split() 调用次序错误。
  • 全部使用 :.1f 或 round(total,1),丢失非整数结果的更多小数;整数转 int 后丢掉 .0,又有人给浮点结果再次拼 .0。
  • 分支只处理整数没有 else;没有 print;通过加 1e-9、异常后输出 0 等方式掩盖原来的输入或精度问题。

错误写法 1:一行三个数误读三行

python
a = float(input())
b = float(input())
c = float(input())
print(a+b+c)

修改: 先 input().split(),再分别转换三个字段。

错误写法 2:把列表转成单个浮点数

python
values = float(input().split())

修改: 转换每个元素,不能直接 float(列表)。

错误写法 3:强制所有结果只保留一位

python
a, b, c = map(float, input().split())
print(f"{a+b+c:.1f}")

修改: 非整数不应强行截到一位,直接输出 float 和即可。

错误写法 4:整数结果丢掉 .0 或又拼 .0

python
print(int(total))
print(str(total) + ".0")

修改: 两种错误分别丢 .0、多加 .0;保留 float 类型输出。

错误写法 5:分支遗漏非整数输出

python
if total.is_integer():
    print(f"{total:.1f}")

修改: 若使用分支必须补 else: print(total)。

正确方法 · 参考答案(徐志衡)

把三个数转为浮点数后求和,输出保留浮点形式。

python
# Solution 1
# 使用 map 函数将输入的字符串转换为浮点数 float类型
x, y, z = map(float, input().split())
a = x + y + z
# 强烈推荐使用 is_integer() 方法判断浮点数是否为整数
if a.is_integer():
    print(f'{a:.1f}')
else:
    print(a)

同学的不同 AC 方法

逐项 float 再相加

对应知识/PPT: 第2章35、46–47页。

最适合说明类型转换。

python
a,b,c=input().split()
x=float(a)
y=float(b)
z=float(c)
s=x+y+z
print(s)
map 批量转换

对应知识/PPT: 第4章18页(后续)。

与逐项转换是同一模型的简写。

python
a,b,c=map(float,input().split())
print(a+b+c)
sum 累加

对应知识/PPT: 第3章15–16页;sum/生成器为补充。

观察到列表与生成器写法;三个数可直接相加。

python
nums=list(map(float,input().split()))
m=sum(nums)
print(m)
判断整数值再分支

对应知识/PPT: 第3章5–8页;is_integer 为补充。

整数值用 :.1f,其他直接输出;本题直接 print(float 和) 即可。

python
a, b, c = map(float, input().split())
total = a + b + c
if total.is_integer():
    print(f"{total:.1f}")
else:
    print(total)

方法的适用条件

还发现了已 AC 但逻辑有瑕疵的变体:把数值与 int 类型对象比较,或把非整数统一格式化两位。这些不能作为可靠参考;例如 1.234、2、3 的和是 6.234,强制两位会丢信息。容差与 round(...,10) 也不是题面要求。

04 · 计算句子中的单词个数 ​

提交结果分布共 111 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
长度与元素个数第2章,第29、32、35页;第6章,第8–10页(后续展开)len(字符串) 是字符数,len(split 后的列表) 是字段数。
字符串方法与函数调用第2章,第30、32、34页s.upper()、s.lower()、s.split() 需要括号;方法返回新值,必须接住或直接用于表达式。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 只写 split 没有 (),或在 print() 的返回值上调用 split。
  • 先 int(input()) 再 split,类型不符;使用 tuple().split;变量拼错。
  • 把样例句子写死,或作为 input 的提示参数,多输出文字。

错误写法 1:方法没有被调用

python
words = input().split
print(len(words))

修改: split() 才返回单词列表。

错误写法 2:在 print 返回值上拆分

python
words = print(input()).split()

修改: 先读取并拆分,再输出个数。

错误写法 3:硬编码句子或使用提示语

python
sentence = "teacher assistance is so handsome"
sentence = input("teacher assistance is so handsome")

修改: 两种写法分别忽略真实输入或多输出提示;使用 input()。

正确方法 · 参考答案(徐志衡)

用 split() 按空白分词,再统计词数。

python
s = input().split()
print(len(s))

同学的不同 AC 方法

split 后 len

对应知识/PPT: 第2章29、32、35页。

推荐,能自然处理连续空白。

python
sentence=input()
words=sentence.split()
print(len(words))
拆分后循环计数

对应知识/PPT: 第3章15–16页。

与 len 结果一致,但更繁琐。

python
a=input().split()
b=0
for i in a:
   b+=1
print(b)
统计空格加一

对应知识/PPT: 第2章31页。

有 AC;仅在非空且单词间恰好一个空格、无首尾空格时成立。

python
sentence = input()
k = sentence.count(" ")
print(k+1)
按字面空格拆分

对应知识/PPT: 第2章32页。

有 AC;连续空格会产生空字段,与无参数 split 不同。

python
a = input()
b = a.split(' ')
print(len(b))

方法的适用条件

例如 one two(两个连续空格):split() 得到 2 个单词,count(" ")+1 和 split(" ") 的长度得到 3。这个用例用于比较适用条件,不声称 OJ 隐藏测试包含它。

05 · 反向输出一个三位数 ​

提交结果分布共 122 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。
字符串方法与函数调用第2章,第30、32、34页s.upper()、s.lower()、s.split() 需要括号;方法返回新值,必须接住或直接用于表达式。
reversed 与 join第2章第32页 join;第1章第29页内置函数总览,reversed 为补充reversed(s) 返回逆序迭代器,再用空串 join 连成字符串;不原地修改 s。

提交中出现的错误与定位

  • 反转后转 int,100 的 001 变成 1;对 int 对象切片。
  • 数位相加而非拼接,下标或十位提取错误;用 / 得到带 .0 的数位。
  • 对字面量 "n" 反转、把 100 或 321 写死、输出原顺序;还出现贴错题目代码、题面文字作为代码。

错误写法 1:反转结果再转整数

python
s = input()
print(int(s[::-1]))

修改: 保持字符串,输出 s[::-1],否则前导零被丢掉。

错误写法 2:整数对象不能切片

python
n = int(input())
print(n[::-1])

修改: 直接读字符串,或先 str(n);不要对 int 切片。

错误写法 3:数位相加不等于反向输出

python
n = int(input())
a = n%10
b = n//10%10
c = n//100
print(a+b+c)

修改: 用 f"{a}{b}{c}" 或 print(a,b,c,sep="")。

错误写法 4:反转的是变量名字面量

python
n = input()
print("n"[::-1])

修改: 变量 n 不加引号。

正确方法 · 参考答案(徐志衡)

把三位数当作字符串反向输出,保留前导零。

python
# Solution 1
s = input()
# .reverse()是原地修改列表,然而字符串是不可变的,所以字符串没有.reverse()方法
# reversed()函数反转字符串会生成新的变量的迭代器,通过 .join()方法将字符拼接为字符串
t = "".join(reversed(s))
print(t)

同学的不同 AC 方法

逆序切片

对应知识/PPT: 第2章26–27页。

保留三位字符,包括前导零。

python
x=input()
print(x[::-1])
按下标拼接

对应知识/PPT: 第2章26–27页。

三位规模固定,便于理解下标。

python
num = input()
print(num[2] + num[1] + num[0])
算术提取数位

对应知识/PPT: 第2章15、38页。

输出必须保留三位,不把它们相加。

python
num = int(input())
a = num // 100       
b = num //10 %10   
c = num % 10         
print(f"{c}{b}{a}")
重建整数再补零

对应知识/PPT: 第2章39页。

宽度 3、填充 0;和小数精度 .2f 不同。

python
n=int(input())
a=n//100
b=n//10%10
c=n%10
n=c*100+b*10+a*1
print(f"{n:03d}")
逆序循环输出

对应知识/PPT: 第1章28页;第3章15–16页。

观察到列表/字符串两种版本;切片更简洁。

python
a=[]
a=list(input())
for  i in range(len(a)):
    print(a[len(a)-i-1],end="")

06 · 字符串中的整数求和 ​

提交结果分布共 134 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 按两行读取;int 作用于列表或带字母的整个串;只取第一位,或切片混入非数字。
  • 直接拼接数字字符串;split 缺 () 或拼成 spilt;str 内置类型与自己的字符串变量混淆。
  • Res 与 res 大小写不一致、覆盖 print、中文标点;输出中间值,或异常时输出 0/提示信息。

错误写法 1:两行输入与列表转换错误

python
left = input().split()
right = input().split()
print(int(left[:2]) + int(right[:2]))

修改: 只读一行解包出两个字符串,切字符串后转 int。

错误写法 2:数字字符串仍然被拼接

python
a, b = input().split()
a = a[:2]
b = b[:2]
print(a+b)

修改: 求和前分别 int(a)、int(b)。

错误写法 3:切片只取一位或混入字母

python
num1 = int(a[:1])
num2 = int(b[1:])

修改: 两串都取 [:2]。这两行代表两种提交中的错误切片。

错误写法 4:覆盖内置 print

python
left, right = input().split()
num1 = int(left[:2])
print = right[:2]
num2 = int(right[:2])
print(num1 + num2)

修改: 不要给 print 赋值;删除错误赋值行。

错误写法 5:方法拼写和变量大小写

python
parts = input().spilt()
Res = num1 + num2
print(res)

修改: 两个独立错误:split 拼写,Res/res 保持一致。

正确方法 · 参考答案(徐志衡)

分别提取两个字符串的前两位,转换为整数后求和。

python
a, b = input().split()
# 通过切片取字符串前两位并用 int()函数转换为整数
x = int(a[:2])
y = int(b[:2])
print(x + y)

同学的不同 AC 方法

前两位切片

对应知识/PPT: 第2章27、35、46–47页。

最贴题。

python
x1,x2=input().split()
n1=int(x1[:2])
n2=int(x2[:2])
print(n1+n2)
去掉最后字母

对应知识/PPT: 第2章26–27页。

题目保证两数字加一字母,因此等价。

python
a = str(input())
b = a.split()
c = int(b[0][:-1])
d = int(b[1][:-1])
print(c + d)
拼接或位权计算

对应知识/PPT: 第2章15、26–27页。

对照“两个字符组成的整数”与“十位×10+个位”。

python
a=input().split()
s1=a[0]
s2=a[1]
b=int(s1[0]+s1[1])
c=int(s2[0]+s2[1])
print(b+c)
python
a = input().split(' ')
print((int(a[0][0]) + int(a[1][0])) * 10 + int(a[0][1]) + int(a[1][1]))
列表推导式 / sum

对应知识/PPT: 第3章15–16页;第6章列表(后续)。

观察到的简写;不作为当前必会语法。

python
a, b = [int(num[:2]) for num in input().split()]
print(a + b)
python
print(sum(int(x[:-1]) for x in input().split(' ')))

方法的适用条件

有 AC 直接按整行固定下标取字符,它依赖恰好一个分隔空格;split 更清楚。还有多余的 try/except、float 后转 int,在合法输入下通过,但不是新的算法。

07 · 字母加密 ​

提交结果分布共 140 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
字符编码与循环位移第2章,第29、43–44页ord 得到编码,chr 转回字符;字母先减 ord("a"),位移后对 26 取余,再加回基准。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
字符串方法与函数调用第2章,第30、32、34页s.upper()、s.lower()、s.split() 需要括号;方法返回新值,必须接住或直接用于表达式。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。
模块导入与 math 调用第1章,第23–26页;第5章,第3–5页(后续展开)import math 后用 math.sqrt;from math import sqrt 后用 sqrt,名称不能混用。

提交中出现的错误与定位

  • 照 PPT 的示例先读密钥再读字符,但 OJ 要求相反;把两行当一行,或密钥未转 int。
  • 用 %2、加减 27,或仅对密钥取余、没有对最终字母位置取余;只减一次 26 无法处理大密钥。
  • 忘了减去或加回 ord("a"),chr(0..25) 输出控制字符;括号使取余范围错误。
  • 用元组作字符串下标、写死密钥、贴错乘法或字符串求和代码,夹入 Markdown 围栏。

错误写法 1:照搬 PPT 的输入顺序

python
key = int(input())
letter = input()

修改: OJ 本题先读字母,再读密钥,PPT 示例次序不同。

错误写法 2:仅对密钥取余不处理字母回绕

python
new_code = ord(letter) + key % 26
print(chr(new_code))

修改: 先转到 0…25 的字母位置,对位置与密钥之和取余。

错误写法 3:未加回字符编码基准

python
position = (ord(letter)-ord("a")+key)%26
print(chr(position))

修改: 使用 chr(position+ord("a"))。

错误写法 4:环大小误写成 2 或 27

python
position = (ord(letter)-ord("a")+key)%2
new_code = ord(letter)+key-27

修改: 两个独立误写:字母环有 26 个字母;用正确的完整模表达式。

正确方法 · 参考答案(徐志衡)

利用字母的编码与取模实现环上的移动;先读字母,再读密钥。

python
letter = input().strip()
key = int(input())
shifted = (ord(letter) - ord('a') + key) % 26
print(chr(ord('a') + shifted))

同学的不同 AC 方法

ord/chr 编码位移

对应知识/PPT: 第2章29、44页。

推荐,明确 0…25 的位置模型。

python
ltr=input()
n=int(input())
ltrvlu=ord(ltr)-ord('a')
newvlu=(ltrvlu+n)%26
encltr=chr(newvlu+ord('a'))
print(encltr)
字母表 find + 索引

对应知识/PPT: 第2章31、43页。

和编码法同一循环模型。

python
alphabet = "abcdefghijklmnopqrstuvwxyz"
cha = input()
key = int(input())
pos_s = alphabet.find(cha)	
pos_t = (pos_s + key) % len(alphabet) 
new_char = alphabet[pos_t]         
print( new_char)
先缩小密钥再分支回绕

对应知识/PPT: 第2章15页;第3章5–8页。

可行但分支较多;必须保证归一化正确。

python
alpha1=input()
key=int(input())
if key>=27:
    key%=26
n1=ord(alpha1)
if n1+key<=122:
    alpha2=chr(n1+key)
else:
    alpha2=chr(n1+key-26)
print(alpha2)
while 反复减 26

对应知识/PPT: 第3章17页。

有 AC,大密钥需要多次循环;模运算一次完成。

python
a=input()
b=int(input())
c=ord(a)
d=b+c
while d>122:
     d-=26
while  d<97:
     d+=26
print(chr(d))
函数封装/库字母表

对应知识/PPT: 第4章函数、第5章导入;具体库为补充。

确有 AC,本题只处理一个字母,不必提前引入整段文本处理。

python
def encrypt_char(char, n):
    original_pos = ord(char) - ord('a')
    new_pos = (original_pos + n) % 26
    return chr(new_pos + ord('a'))
def encrypt_text(text, n):
    result = ""
    for char in text:
        if 'a' <= char <= 'z':
            result += encrypt_char(char, n)
        else:
            result += char 
    return result
text = input().strip() 
n = int(input().strip())  
encrypted = encrypt_text(text, n)
print(encrypted)
python
import string
alphabet=string.ascii_lowercase
cha=input()
key=int(input())
pos_s=alphabet.find(cha)
pos_t=(pos_s+key)%len(alphabet)
new_char=alphabet[pos_t]
print(new_char)

方法的适用条件

AC 中也发现手写字母表缺字/错字,以及用 96 为基准却没有处理余数 0 的写法。后者遇到 y、密钥 1 会得到反引号而非 z;它们只反映当前判题结果,不列为正确方法。

四、py 练习 2 ​

01 · 基础输入输出练习-04 ​

提交结果分布共 24 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。
批量转换的可选简写第4章,第18页(后续系统讲解)map(int/float, iterable) 第一个参数是函数,第二个是可迭代对象;本课可先逐项转换,不以 map 作为前置要求。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。
模块导入与 math 调用第1章,第23–26页;第5章,第3–5页(后续展开)import math 后用 math.sqrt;from math import sqrt 后用 sqrt,名称不能混用。

提交中出现的错误与定位

  • int(input().split()) 把列表直接转整数;map(int(input().split())) 缺少函数/可迭代对象;split 拼错。
  • 平均值用默认显示、round 或 :.1f,未固定两位;输入行结构读取错误。

错误写法 1:整个列表不能直接 int

python
b, c = int(input().split())

修改: 逐项 int,或 map(int, input().split())。

错误写法 2:map 的第一个参数写成调用结果

python
b, c = map(int(input().split()))

修改: 正确写法是 map(int, input().split())。

错误写法 3:平均值精度不符

python
print(f"{(a+b+c)/3:.1f}")

修改: 使用 :.2f。

正确方法 · 参考答案(尹思源)

读入浮点数与两个整数,计算三个数的平均值并保留两位小数。

python
a = float(input())
b, c = map(int, input().split())
avg = (a + b + c) / 3
print(f"{avg:.2f}")

同学的不同 AC 方法

逐项转换

对应知识/PPT: 第2章35、46–47页。

对应混合输入结构。

python
a = float(input())
b, c = input().split()
print(f"{(a + int(b) + int(c)) / 3:.2f}")
map 或列表推导式

对应知识/PPT: 第4章18页;第3章15–16页(后续)。

批量处理第二行;不是跨行读取。

python
a= float(input())
b,c= map(int,input().split())
y=(a+b+c)/3
print(f'{y:.2f}')
python
a = float(input())
b, c = [float(x) for x in input().split(' ')]
print(f"{(a + b + c) / 3:.2f}")
都用 float

对应知识/PPT: 第2章46–47页。

这些输入能转换;按题意用 int 更清晰。

python
num1 = float(input())
num2 , num3 = map(float , input().split())
average = (num1 + num2 + num3) / 3
print(f"{average:.2f}")
statistics.mean

对应知识/PPT: 库函数的课程外补充。

有 AC,但三个数的平均值用加法和除法足够。

python
from statistics import mean
c = float(input())
a, b = input().split()
print(f"{mean([c, int(a), int(b)]):.2f}")
输出 f / format

对应知识/PPT: 第2章38–39页。

两种均在 AC 中出现。

python
a = float(input())
b, c = map(int, input().split())
avg = (a + b + c) / 3
print("{0:.2f}".format(avg))

02 · 基础输入输出练习-05 ​

提交结果分布共 19 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。

提交中出现的错误与定位

  • s[:-1] 取除最后一位外的整段,或直接输出整个字符串。
  • 对最后字符再 split 得到列表,输出带方括号;相邻 f 字符串相接没有分隔空格。
  • 变量未定义。

错误写法 1:切片取了除最后一位外的整串

python
print(a%7, f"{b*3:.3f}", s[:-1])

修改: 最后一位用 s[-1]。

错误写法 2:输出列表而非一个字符

python
print(a%7, f"{b*3:.3f}", s[-1].split())

修改: 删除 split();s[-1] 已是字符字符串。

错误写法 3:相邻格式串没有空格

python
print(f"{a%7}" f"{b*3:.3f}" f"{s[-1]}")

修改: 用单个格式串加空格,或 print 的三个参数。

正确方法 · 参考答案(尹思源)

按照题目指定的格式处理整数、浮点数和字符串。

python
a, b, s = input().split()
print(f"{int(a)%7} {float(b)*3:.3f} {s[-1]}")

同学的不同 AC 方法

逐项变量 + 多参数输出

对应知识/PPT: 第1章28页;第2章15、26、38页。

推荐,三种类型分别处理。

python
a, b, s = input().split()
print(int(a) % 7, f"{float(b) * 3:.3f}", s[-1])
列表索引 + 一条格式串

对应知识/PPT: 第2章35、38页。

与解包区别仅在取字段方式。

python
a = input().split()
print(int(a[0]) % 7, f'{float(a[1]) * 3:.3f}', a[2][-1])
python
data = input().split()
num_int = int(data[0])
num_float = float(data[1])
s = data[2]
rem = num_int % 7
mul = num_float * 3
last_char = s[-1]
print(f"{rem} {mul:.3f} {last_char}")
商反推余数

对应知识/PPT: 第2章15页。

与 a%7 等价,可以手算证明。

python
mix=input().split()
a=int(mix[0])
b=float(mix[1])
c=str(mix[2])
m=a-(a//7)*7
n=str(c[-1])
print(m,f"{b*3:.3f}",n)
zip 配对转换函数

对应知识/PPT: 课程外组合简写。

观察到 AC,但当前不要求学习这种写法。

python
a, b, c = [f(x) for f, x in zip([int, float, str], input().split(' '))]
print(a % 7, f"{b * 3:.3f}", c[-1])

方法的适用条件

有一条 AC 把余数写成 a-7。输入 8 时碰巧对,输入 15 应是 1,却会输出 8;不能列为通用正确解法。

03 · 基础输入输出练习-07 ​

提交结果分布共 26 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。

提交中出现的错误与定位

  • 把两行当一行 split 后访问第二项,越界;a[6] 当第六位,长度恰好 6 时越界。
  • b[2:5]、b[3:5]、b[4:7] 起止错位;长度判断 >6 漏掉合法的等于 6。
  • 两结果同一行输出,或中文括号引发语法错误。

错误写法 1:第六位写成下标 6

python
print(a[6])

修改: 下标从 0 开始,第六位是 a[5]。

错误写法 2:切片端点不符

python
print(b[3:5])
print(b[2:5])

修改: 两个错误片段分别少取一位、整体偏左;应 b[3:6]。

错误写法 3:同一行输出两个答案

python
print(a[5], b[3:6])

修改: 两次 print,或使用明确的换行。

错误写法 4:漏掉合法最短长度

python
if len(a) > 6:
    print(a[5])

修改: 题面保证至少 6,无需判断;若判断不能排除等于 6。

正确方法 · 参考答案(尹思源)

通过字符串下标和切片取得指定字符。

python
str1 = input()
str2 = input()
print(str1[5])
print(str2[3:6])

同学的不同 AC 方法

保存两串再索引/切片

对应知识/PPT: 第2章26–27页。

推荐。

python
a=input()
b=input()
print(a[5])
print(b[3:6])
读完一行立即输出

对应知识/PPT: 第1章27–28页;第2章26–27页。

输出顺序与题意一致;不需要保存后续还要使用的原串。

python
print(input()[5])
print(input()[3:6])
一次用换行输出

对应知识/PPT: 第2章24、38页。

结果仍是两行。

python
a=input()
b=input()
aa=a[5]
bb=b[3:6]
print(f"{aa}\n{bb}")

方法的适用条件

有一条 AC 写 b[3:7]。长度恰好 6 时切片自动截到末尾,错误被遮住;第二串 ABCDEFGHI 时会多取 G。课堂要同时测最短合法长度和更长串。

04 · 计算2的幂 ​

提交结果分布共 14 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 本次唯一 WA 使用 0<n<31 的条件,拒绝了合法的 n=0。^ 与 ** 的区别可以课堂补充,但不作为本题已观察到的错误。

错误写法 1:拒绝合法的零指数

python
n = int(input())
if 0 < n < 31:
    print(2**n)
else:
    print("error")

修改: 应允许 n=0;题面保证范围时直接 2**n。

正确方法 · 参考答案(尹思源)

使用幂运算计算 2 的 n 次方。

python
n = int(input())
print(2**n)

同学的不同 AC 方法

整数幂

对应知识/PPT: 第2章15页。

推荐。

python
a=int(input())
print(2**a)
循环连乘

对应知识/PPT: 第3章15–16页。

初值 1 保证 n=0 时循环零次仍正确。

python
n=int(input())
y=1
for i in range(n):
    y*=2
print(y)
位移

对应知识/PPT: 课程外扩展。

观察到 AC;当前用乘方表达数学含义即可。

python
print(1 << int(input()))
范围分支

对应知识/PPT: 第3章5–8页。

题目保证范围;单写一行比较表达式并不会阻止后续执行。

python
n = int(input())
if 0 <= n < 31 :
   print(f"{2**n}")

05 · 大象喝水 ​

提交结果分布共 22 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
向上、向下取整与单位换算第2章,第15页;第5章,第25–26页(后续展开)至少需要的完整桶数向上取整;已完成的整段时间用整除。先统一单位,再决定取整方向。
模块导入与 math 调用第1章,第23–26页;第5章,第3–5页(后续展开)import math 后用 math.sqrt;from math import sqrt 后用 sqrt,名称不能混用。
批量转换的可选简写第4章,第18页(后续系统讲解)map(int/float, iterable) 第一个参数是函数,第二个是可迭代对象;本课可先逐项转换,不以 map 作为前置要求。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。
参考答案的向上取整写法第2章第15页整除;第5章第26页取整对照// 朝负无穷取整,所以 -(-num//1) 得到向上取整;最后 int 将整数值显示为整数。

提交中出现的错误与定位

  • 20 升未换成 20000 立方厘米,或误用 2000、反向换算;漏 r 的平方。
  • 用余数代替桶数、直接整除得到带 .0 的输出;出现总是 floor+1 的思路,整除时会多算一桶。
  • 漏 import、pi 未定义;把输入列表直接转 int。

错误写法 1:单位未统一或漏平方

python
volume = 3.14159*r*h
answer = math.ceil(20/volume)

修改: 半径要平方,目标是 20000cm³;或把桶体积换成升。

错误写法 2:无条件给整除结果加一

python
answer = int(20000//volume + 1)

修改: 只在不足时加一,或用 ceil;恰好够时不应多算。

错误写法 3:把余数当桶数

python
answer = volume % 20000

修改: 应求目标体积除以桶体积的向上取整。

正确方法 · 参考答案(尹思源)

先计算桶的体积,再用向上取整确定需要的桶数。

python
h, r = map(float, input().split())
Pi = 3.14159
V = Pi * r**2 * h
num = 20 * 1000 / V
# num 向上取整
num = int(-(-num // 1))
print(num)

同学的不同 AC 方法

ceil

对应知识/PPT: 第5章25–26页。

推荐,直接表达至少桶数。

python
import math
h, r = map(int, input().split())
pi = 3.14159
v = pi * r * r * h
total = 20000
bucket = math.ceil(total / v)
print(bucket)
先截断再判断余量

对应知识/PPT: 第2章47页;第3章5–8页。

只在不足时增加一桶,区别于无条件 +1。

python
data = input().split()
h = int(data[0])
r = int(data[1])
volume = 3.14159 * r * r * h
count = int(20000 / volume)
if count * volume < 20000:
    count += 1
print(count)
逐桶循环

对应知识/PPT: 第3章17页。

直观但次数随桶体积变化,公式更直接。

python
h,r= map(int,input().split())
y=1
while 3.14159*r*r*h*y<20*1000:
    y+=1
print(y)
把体积换成升

对应知识/PPT: 第2章15页。

与全部用立方厘米等价,单位必须统一。

python
import math
h,r=map(int,input().split())
Pi=3.14159
area=Pi*r*r*h
m=area/1000
print(int(math.ceil(20/m)))
负数整除取上界

对应知识/PPT: 第2章15页(组合技巧补充)。

确有 AC;需要理解 // 朝负无穷取整,基础讲评不必要求。

python
ab = input()
h = int(ab.split()[0])
r = int(ab.split()[1])
v = 3.14159*r*r*h/1000
print(int(-(-20//v)))

方法的适用条件

还有 AC 使用 math.pi、先 round(volume)、无条件 floor+1;这些与指定 π 或“恰好够”的边界存在差别。课堂参考仍用 π=3.14159,不把所有已通过变体都作为严格等价实现。

06 · 数字转星期 ​

提交结果分布共 15 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
列表索引与对应关系第2章,第35、41–42页;第6章,第18、24页(后续展开)输入编号从 1 开始,列表下标从 0 开始;列表项的次序和数量必须与题意一致。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。
字符串方法与函数调用第2章,第30、32、34页s.upper()、s.lower()、s.split() 需要括号;方法返回新值,必须接住或直接用于表达式。

提交中出现的错误与定位

  • 把 Wed 拼成 Wen,缺少 Thu 导致列表只有六项或后续次序错位。
  • 把输入 n 直接当零基下标,没有减 1。

错误写法 1:星期缩写和项数不符

python
days = ["Mon", "Tue", "Wen", "Fri", "Sat", "Sun"]
print(days[n-1])

修改: Wed 不能写 Wen,七项中还必须有 Thu。

错误写法 2:编号当成零基下标

python
days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
print(days[n])

修改: 编号 1…7 对应下标 0…6,使用 n-1。

正确方法 · 参考答案(尹思源)

把 1 到 7 映射为对应的英文星期缩写。

python
weeks = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
day = int(input())
print(weeks[day - 1])

同学的不同 AC 方法

列表/元组索引

对应知识/PPT: 第2章42页;第6章18、28页(后续)。

次序映射,元组同样可读索引。

python
week=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]
n=int(input())
print(week[n-1])
python
n=int(input())
week=("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
print(week[n-1])
首项留空后按编号索引

对应知识/PPT: 第2章42页的索引模型。

用一个占位项把存储下标与编号对齐。

python
week = ["", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
n = int(input())
print(week[n])
if/elif 七分支

对应知识/PPT: 第3章5–11页。

最直接但较长,检查每个缩写。

python
x=int(input())
if x==1:
    print('Mon')
elif x==2:
    print('Tue')
elif x==3:
    print('Wed')
elif x==4:
    print('Thu')
elif x==5:
    print('Fri')
elif x==6:
    print('Sat')
else:
    print('Sun')
固定宽度字符串切片

对应知识/PPT: 第2章27、41页。

每项恰好三个字符,正是 PPT 的固定宽度映射。

python
n = int(input())
s = "MonTueWedThuFriSatSun"
print(s[(n - 1) * 3:n * 3])
字符串 split 后索引

对应知识/PPT: 第2章32、35、42页。

先由分隔符建立列表。

python
date="Mon,Tue,Wed,Thu,Fri,Sat,Sun"
Date=date.split(",")
number=int(input())
print(Date[number-1])

07 · 分离整数的各个数位 ​

提交结果分布共 14 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
字符串方法与函数调用第2章,第30、32、34页s.upper()、s.lower()、s.split() 需要括号;方法返回新值,必须接住或直接用于表达式。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。

提交中出现的错误与定位

  • 对 int 对象下标访问;int() 没有读输入,得到 0。
  • split("123") 把 123 当分隔符,无法分离数位;join 后仍在一行输出 123。
  • print 语句后夹了 123 等多余字符,导致语法错误。

错误写法 1:对整数使用下标

python
n = int(input())
print(n[0])

修改: 保留字符串后索引,或用整除/余数求数位。

错误写法 2:没有读取输入

python
n = int()

修改: int() 得到零;需要 int(input()) 或 input()。

错误写法 3:把数字当分隔符

python
s = input()
parts = s.split("123")
print("".join(parts))

修改: split 按分隔符分组,不会逐位拆数;直接逐字符输出。

正确方法 · 参考答案(尹思源)

把整数作为字符串读取,逐位输出。

python
nums = input()
for num in nums:
    print(num)

同学的不同 AC 方法

字符串逐位输出

对应知识/PPT: 第2章26页。

不需要转换成数。

python
x=input()
print(x[0])
print(x[1])
print(x[2])
算术分离

对应知识/PPT: 第2章15页。

另一模型是百位/十位/个位的位权。

python
n = int(input())
print(n // 100)
print(n // 10 % 10)
print(n % 10)
逐次求余或相减

对应知识/PPT: 第2章15页。

适合手动追踪中间余量。

python
a=int(input())
b=a//100
m=a-(b*100)
c=m//10
d=m-(c*10)
print(b)
print(c)
print(d)
join 或换行串

对应知识/PPT: 第2章24、32页。

join 在每两个字符之间放换行。

python
print('\n'.join(input()))
python
abc = input()
print(abc[0] + "\n"+ abc[1] + "\n" + abc[2])
循环逐字符输出

对应知识/PPT: 第3章15–16页。

三行输出不能改成同行字符连接。

python
n=input()
for i in range(3):
    print(n[i])

08 · 苹果和虫子1 ​

提交结果分布共 17 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
类型、变量与数值转换第2章,第5–8、13、35、46–47页变量名区分大小写;int 用于整数,float 接受整数或小数;转换必须作用于一个字段。
算术运算与优先级第2章,第14–15、18页区分 +、*、/、//、%、**;括号决定先后次序,数学式中的乘号不能省略。
向上、向下取整与单位换算第2章,第15页;第5章,第25–26页(后续展开)至少需要的完整桶数向上取整;已完成的整段时间用整除。先统一单位,再决定取整方向。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。
批量转换的可选简写第4章,第18页(后续系统讲解)map(int/float, iterable) 第一个参数是函数,第二个是可迭代对象;本课可先逐项转换,不以 map 作为前置要求。

提交中出现的错误与定位

  • 六条 WA 中出现向上取整消耗量,把正在吃的苹果也扣掉。
  • 用 y%x 余数当成已吃数量;判断 y//x 是否为零,而不是理解整段时间和余量。

错误写法 1:把没吃完的苹果也扣掉

python
finished = math.ceil(y/x)
print(n-finished)

修改: 题目包含没吃完的苹果,已吃完数量用 y//x。

错误写法 2:余数误当已吃数量

python
print(n-y%x)

修改: % 是剩余时间,// 才是完整吃完的个数。

错误写法 3:判断对象错了

python
if y//x == 0:
    print(n-y//x)
else:
    print(n-y//x-1)

修改: 不需要给非零商再减一;直接 n-y//x。

正确方法 · 参考答案(尹思源)

根据虫子吃完苹果的时间计算剩余数量。

python
n, x, y = map(int, input().split())
print(n - y // x)

同学的不同 AC 方法

直接整数公式

对应知识/PPT: 第2章15页。

所有 AC 的核心模型均是扣除完整吃完的苹果。

python
n,x,y=map(int,input().split())
ans=n-y//x
print(ans)
保存中间量

对应知识/PPT: 第2章5、49页。

教学上最容易解释整除的对象。

python
n, x, y = map(int, input().split())
eat = y // x
res = n - eat
print(res)
输入转换的不同写法

对应知识/PPT: 第2章35、46–47页;第4章18页(后续)。

属于输入写法差异,不能虚构成不同取整算法。

python
n, x, y = input().split()
print(int(n) - int(y) // int(x))
python
n,x,y=map(int,input().split())
m=y//x
print(n-m)
python
a, b, c = [int(x) for x in input().split(' ')]
print(a - c // b)

09 · 字符串交换 ​

提交结果分布共 22 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
空白分隔、列表与解包第2章,第32、35、50页split() 返回字符串列表;按字段个数解包,再分别转换类型;一行多个字段与多行输入不同。
浮点数、round 与格式化第2章,第13、19、36–39页round 返回数值,:.2f/ :.3f 控制显示位数;宽度与小数位不同,数值计算和输出格式分别检查。

提交中出现的错误与定位

  • 按一行两个字段读取,访问缺少的字段。
  • 七条 Presentation Error 中出现 print(new1,new2) 同行输出。
  • 新串次序写反或前缀来源不符,没有真正交换两个串的前两位。

错误写法 1:两行误作同一行

python
a, b = input().split()

修改: 用两次 input()。

错误写法 2:两行结果写到同一行

python
print(b[:2]+a[2:], a[:2]+b[2:])

修改: 分别 print 两个新串。

错误写法 3:新串输出次序反了

python
print(a[:2]+b[2:])
print(b[:2]+a[2:])

修改: 第一行应对应原第一个串,交换后 b 的前缀与 a 的后缀。

正确方法 · 参考答案(尹思源)

用字符串切片交换指定部分。

python
str1 = input()
str2 = input()
str3 = str1[:2] + str2[2:]
str4 = str2[:2] + str1[2:]
print(str4)
print(str3)

同学的不同 AC 方法

两段切片拼接

对应知识/PPT: 第2章27页。

主要方法。

python
str1= input()
str2= input()
new_str1 = str2[:2] + str1[2:]
new_str2 = str1[:2] + str2[2:]
print(new_str1)
print(new_str2)
先保存新串或直接输出

对应知识/PPT: 第2章5、27页;第1章28页。

都保持原串,避免覆盖后再用错数据。

python
str1=input()
str2=input()
print(str2[:2]+str1[2:])
print(str1[:2]+str2[2:])
逐字符拼接

对应知识/PPT: 第2章26–27页。

等价但长,适合对照片段来源。

python
a=input()
b=input()
a1=a[0]
a2=a[1]
b1=b[0]
b2=b[1]
print(b1+b2+a[2]+a[3])
print(a1+a2+b[2]+b[3])
f 字符串拼接

对应知识/PPT: 第2章38页。

格式串里不插入额外空格。

python
a, b = input(), input()
print(f"{b[:2]}{a[2:]}")
print(f"{a[:2]}{b[2:]}")

10 · 字符串大小写转换 ​

提交结果分布共 13 次提交

知识点与 PPT

知识点PPT 位置要讲清什么
逐行输入与输出第1章,第5、27–28页按 IPO 分清输入、计算、输出;input() 每次读一行且返回 str,OJ 输出不加提示语。
字符串索引、拼接与切片第2章,第23、26–27页索引从 0 开始,负下标从末尾算;切片右端不包含;+ 拼接、* 重复,字符串保留字符顺序与前导零。
字符串方法与函数调用第2章,第30、32、34页s.upper()、s.lower()、s.split() 需要括号;方法返回新值,必须接住或直接用于表达式。
代码格式与名称第1章,第21页;第2章,第6、38、49页英文标点、成对引号和括号;f 紧贴字符串引号;赋值与比较区分;不要覆盖 print 等内置名称。
重复计算的可选写法第3章,第14–16页(后续系统讲解)for 遍历、range 次数与累加/更新;循环写法要说明每次更新的含义,并与直接公式比较。
条件、分支与边界第2章,第16页;第3章,第5–8页= 是赋值,== 是比较;if 分支不能漏掉合法边界,也不能遗漏输出路径。

提交中出现的错误与定位

  • 两条 Runtime Error 中出现 upper/lower 未写调用括号,把方法对象与字符串相加。

错误写法 1:方法未调用

python
s = input()
print(s[0].upper + s[1].lower + s[2].upper)

修改: upper/lower 后都加 (),取得新字符串后才能拼接。

正确方法 · 参考答案(尹思源)

用大小写转换方法处理字符串中的指定字符。

python
str1 = input()
print(str1[0].upper() + str1[1].lower() + str1[2:].upper())

同学的不同 AC 方法

逐位 upper/lower

对应知识/PPT: 第2章26、30、32、34页。

推荐,最贴合 PPT 提示。

python
s = input()
print(s[0].upper() + s[1].lower() + s[2].upper())
整串 swapcase

对应知识/PPT: 第2章30、32页。

本题保证小写/大写/小写,整串互换完全符合题意。

python
a= input()
print(a.swapcase())
逐字符判断后 join

对应知识/PPT: 第2章32页;第3章5、15–16页;生成器为补充。

观察到 AC;当前可用已有字符串方法替代。

python
print(''.join((x.upper() if x.upper() != x else x.lower()) for x in input()))

课程资料由授课教师、助教与同学共同积累。