跳到主要内容

2.1 计算机解决问题的过程

知识点​

1.单元导入:计算机"会算"但"不会想"​

核心事实:计算机只能执行机器指令,它不会自己思考"该怎么做"。因此要让计算机解决问题,必须先由人把方法想清楚,写成算法,再翻译成程序。

问题 → 人:分析 + 设计算法 → 程序(代码)→ 计算机:执行 → 结果

本单元的知识地图:

小节解决什么问题
2.1 计算机解决问题的过程怎么写一句一句往下走的程序(顺序结构)
2.2 做出判断的分支怎么让程序会判断(选择结构)
2.3 周而复始的循环怎么让程序会重复(循环结构)
2.4 可以复用的代码怎么把代码打包复用(函数与库)

一句话:本单元学的是"程序的三种基本结构 + 函数",这是所有编程语言的共同骨架。

2.算法是什么​

定义:算法是解决某一特定问题的方法与步骤,是解决问题过程的精确描述。

五个特征(必背,与 4.1 呼应):

特征含义反例
有穷性步骤有限,且能在有限时间内结束"一直加 1 直到……"若无终止条件,不是算法
确定性每一步含义明确、无歧义"把数据稍微调整一下"——不明确
可行性每一步都能实际执行"求出最大的质数"——不可行
输入有 0 个或多个输入求圆周率可以无输入
输出至少有 1 个输出没有结果就不是算法

记忆:"有穷、确定、可行、有入、有出"——八字口诀。

3.算法的三种描述方式​

方式优点缺点适用
自然语言通俗易懂、贴近人的表达易产生歧义、冗长、不严谨口头交流、初步构思
流程图直观、结构清晰,一眼看出分支与循环复杂算法图会很大,绘制费时教学、交流、说明思路
伪代码介于自然语言与代码之间,严谨又易读需一定约定,不能直接运行算法设计与交流

选择的思路:先用自然语言想清楚 → 用流程图理结构 → 用伪代码定细节 → 最后写成代码。

4.流程图的基本符号(必考)​

符号形状名称作用
圆角矩形(椭圆)起止框表示算法的开始/结束
矩形处理框赋值、计算等处理操作
平行四边形输入/输出框输入数据、输出结果
菱形判断框条件判断,有"是/否"两个出口
箭头流程线表示执行的方向
圆点/连接符连接点连接被断开或跨页的流程线

记忆:"圆起圆止、矩处理、平行入出、菱判断、箭头走"。

三种基本结构的图形特征:

  • 顺序结构:框自上而下,一条线串到底;
  • 选择结构:出现菱形,流程线分叉后汇合;
  • 循环结构:流程线回到前面的某一步(形成回路)。

画图易错点:

  1. 判断框的出口必须标"是/否"(或 Y/N);
  2. 只能有一个开始、一个结束(结构化算法);
  3. 流程线不能交叉、不能无出口;
  4. 循环必须有出口(否则违反有穷性)。

5.Python 程序的两种运行方式​

方式操作特点用途
交互式在 IDLE 的 >>> 提示符后逐行输入输入一句执行一句,立即看结果试验语法、算一个值
文件式新建 .py 文件,写完整体运行(F5)可保存、可修改、可重复运行编写正式程序

程序的基本组成(四段式):

# 2-1 计算圆的面积(注释:说明程序作用)
r = float(input("请输入半径:")) # ① 输入
s = 3.14159 * r * r # ② 处理(计算)
print("圆的面积是:", s) # ③ 输出

注释:以 # 开头,到行末都是注释,不参与执行,用于说明代码意图。好程序必须有注释。

6.变量与赋值​

变量:程序中用来存放数据的"容器",有名字(标识符)和值。

赋值语句:变量名 = 表达式

三条必须理解的点:

  1. = 是赋值号,不是数学里的"等于"——x = x + 1 表示"把 x 原来的值加 1 后再存回 x",在数学上不成立,在程序里完全正确;
  2. 赋值是从右往左执行的:先算右边,再存左边;
  3. 变量可以被反复赋值,后赋的值覆盖先前的值(变量只保留"最后一次"的值)。

变量命名规则(Python):

规则说明合法非法
只能由字母、数字、下划线组成不能有空格、-、$ 等score1、my_agemy-age、总分 1
不能以数字开头数字只能出现在后面a11a
不能使用关键字if、for、while、def、print(函数名)等scorefor = 1
区分大小写A 与 a 是两个不同变量——

命名建议:见名知义(score 而不是 a)、多个单词用下划线(total_score)、不用拼音缩写。

7.数据类型(四种基本类型)​

类型名称写法示例说明常见运算
int整型100、-7、0没有小数部分+ - * // % **
float浮点型(实型)3.14、-0.5、1.0带小数,也可用科学计数法 1e3同上(结果为 float)
str字符串"你好"、'abc'、"123"用单引号或双引号括起;"123" 是字符串不是数字+(拼接)、*(重复)
bool布尔型True、False只有两个值,判断的结果and or not

查看类型:print(type(x))

print(type(100)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("100")) # <class 'str'>

字符串的重要细节:

print("3" + "5") # 输出 35(拼接,不是相加)
print("3" * 3) # 输出 333(重复)
print(3 + 5) # 输出 8

这是初学第一大坑:"3" 加 "5" 得到 "35",不是 8。

8.类型转换​

函数作用示例注意
int(x)转为整数int("25") → 25;int(3.9) → 3小数转整数是"截断",不是四舍五入
float(x)转为浮点数float("3.14") → 3.14;float(5) → 5.0—
str(x)转为字符串str(25) → "25"常用于拼接输出

易错:

  • int("3.14") 会报错(ValueError),必须先 float 再 int:int(float("3.14"));
  • int("abc") 也会报错——字符串里必须真的是数字才能转。

9.输入 input 与输出 print​

(1)input:得到的一定是字符串​

name = input("请输入姓名:") # 得到 str
age = input("请输入年龄:") # 得到 str!即使用户输入 18
age = int(input("请输入年龄:")) # 转成整数

铁律:input() 的返回值永远是 str。要参与算术运算,必须显式转换(int() 或 float())。

(2)print:多种输出形式​

写法示例输出
直接输出print("你好")你好
逗号分隔多项print("面积是", s)面积是 78.5(逗号处自动加一个空格)
sep 改分隔符print(2026, 11, 7, sep="-")2026-11-7
end 改结束符print("a", end="")不换行(默认 end="\n")
% 格式化print("面积是 %.2f" % s)面积是 78.50
formatprint("面积是 {:.2f}".format(s))面积是 78.50
f-string(推荐)print(f"面积是 {s:.2f}")面积是 78.50

%.2f 的含义:f 表示浮点数,.2 表示保留两位小数(会四舍五入,与 int() 的截断不同)。

10.算术运算符与优先级​

运算符名称示例结果
+加7 + 29
-减7 - 25
*乘7 * 214
/真除法7 / 23.5(结果一定是 float)
//整除(向下取整)7 // 23
%取余(求模)7 % 21
**幂2 ** 38

优先级(从高到低):** → * / // % → + -;同级从左到右;有括号先算括号。

三个高频用法:

  1. 判断奇偶:n % 2 == 0 为偶数,n % 2 == 1 为奇数;
  2. 取某位数字:123 // 100 得百位 1;123 % 10 得个位 3;123 // 10 % 10 得十位 2;
  3. 拆分时间:3650 秒 → 3650 // 3600 小时,3650 % 3600 // 60 分钟,3650 % 60 秒。

注意 // 与负数:-7 // 2 的结果是 -4(向下取整,不是 -3),-7 % 2 是 1。中学阶段一般只考正数,知道有这回事即可。

11.顺序结构​

定义:程序按语句书写的先后顺序,自上而下逐条执行,没有跳转、没有分支、没有重复。

这是三种结构中最基本的一种,也是选择与循环结构的"组成单元"。

典型模式:输入 → 处理 → 输出

# 2-2 已知长和宽,求长方形面积与周长
a = float(input("长:"))
b = float(input("宽:"))
area = a * b
perimeter = 2 * (a + b)
print(f"面积 {area:.2f},周长 {perimeter:.2f}")

多个变量同时赋值(Python 特色,可了解):

x, y = 3, 5
x, y = y, x # 交换两个变量的值,无需中间变量

12.常见错误与排查(上机必看)​

错误类型典型提示原因解决
SyntaxError(语法错误)invalid syntax、expected ':'缺括号、缺引号、中文标点、缩进不齐、if 后漏冒号检查成对符号与是否用了中文符号
NameError(名称错误)name 'x' is not defined变量未定义或拼写不一致(大小写)先赋值再使用,核对拼写
ValueError(值错误)invalid literal for int()把非数字字符串转成数字(用户输入了字母)检查输入内容或用 float 兜底
ZeroDivisionErrordivision by zero除数为 0除法前先判断除数是否为 0
TypeError(类型错误)can only concatenate str字符串与数字直接相加用 str() 转换或格式化输出
IndentationErrorunexpected indent缩进不一致(Tab 与空格混用)统一用 4 个空格

排查四步法:

  1. 看最后一行提示——错误类型与原因往往在最后一行;
  2. 看行号——定位到具体行(注意实际错误可能在其上一行,如漏冒号);
  3. 看箭头 ^——Python 会标出认为出错的位置;
  4. 缩小范围——用 print() 输出中间值,或注释掉可疑代码逐段试。

中文标点陷阱:( )、,、" "、: 全角符号是语法错误的高发原因,尤其在中文输入法状态下敲代码。

13.速查表​

序号考点结论
1算法定义解决问题的方法与步骤
2算法五特征有穷、确定、可行、有输入、有输出
3算法描述三方式自然语言、流程图、伪代码
4流程图判断框菱形,两个出口(是/否)
5流程图起止框圆角矩形(椭圆)
6输入输出框平行四边形
7赋值号= 是赋值,不是"等于";x = x + 1 合法
8变量命名字母/数字/下划线,不能数字开头,区分大小写,不用关键字
9四种基本类型int、float、str、bool
10"3" + "5""35"(拼接)
11input() 返回类型永远是 str,要运算必须转换
12int(3.9)3(截断,不是四舍五入)
13int("3.14")报错,需先 float
14/ 与 //7/2=3.5;7//2=3
15% 的用途判断奇偶、取末位数字
16**幂运算,2**3=8
17运算符优先级** → * / // % → + -,括号最高
18保留两位小数输出f"{x:.2f}"(四舍五入)
19print 默认分隔符逗号处加空格;sep 可改
20print 默认结尾换行(end="\n")
21缩进统一 4 个空格,不能 Tab 与空格混用
22最常见语法错误原因中文全角标点

14.课堂提示(讲课参考)​

  • 第一节课不急着讲语法,先立"算法"的概念:让学生用自然语言描述"如何判断一个数是不是偶数",再画流程图,最后才写代码——三遍同一件事,学生才理解三层的关系。
  • input() 返回字符串必须反复强调:让学生写 a = input(); b = input(); print(a+b),输入 3 和 5,输出 35,冲击感很强。
  • int(3.9)=3 与 %.2f 四舍五入对比演示:一个截断、一个四舍五入,考试爱考。
  • 中文标点问题现场制造一次:用中文输入法敲 print("你好") 看报错,比讲十遍有用。
  • 代码规范从一开始抓:注释、见名知义的变量名、4 空格缩进,后面 2.4 与第 4 单元才不会崩。