章节一:python简介

1. 计算机语言分类

  • 低级语言:机器语言(二进制指令串,计算机可直接执行)和汇编语言(使用助记符,需翻译后执行)。
  • 高级语言:如C++、VB、Python、Java等,接近人类自然语言,需通过编译或解释执行。

2. 程序设计语言的发展阶段

  • 正确顺序:机器语言 → 汇编语言 → 高级语言。脚本语言是高级语言的一个分支,并非独立发展阶段。

3. 汇编语言特性

  • 汇编语言使用助记符(如MOV、ADD)代替二进制指令,但最终仍需翻译为机器码才能执行,不能直接操作计算机硬件。直接操作硬件的是机器语言。

4. 编译与解释的区别

  • 编译型语言(如C、C++):一次性翻译整个源程序,生成独立可执行文件。
  • 解释型语言(如Python):每次执行时逐行翻译,不生成独立可执行文件。

5. Python语言的主要特性

  • 是一种面向对象的语言(支持类和对象)。
  • 是一种解释型语言(逐行解释执行)。
  • 是一种跨平台语言(同一份代码可在Windows、Linux、macOS等系统上运行),常被称为“胶水语言”。
  • 是一种脚本语言(通常解释执行,无需显式编译步骤)。

6. IDLE常用快捷键

  • F5:运行当前脚本(Run → Run Module)。
  • F1:打开帮助文档。
  • Ctrl+S:保存文件。
  • Ctrl+Z:撤销操作。

7. Python文件扩展名规范

  • 源代码文件扩展名为 .py
  • 编译后的字节码文件扩展名为.pyc(非源代码文件)。
  • 其他扩展名如.pyw(窗口程序)、.pyd(动态链接库)用途不同。

8. 常见Python开发工具特点

  • IDLE:Python自带的简易IDE,体积小巧,具备代码编辑、运行、调试等基本功能,无需额外安装。
  • IPython:增强的交互式Python解释器,支持变量自动补全、自动缩进、内置丰富功能。
  • Jupyter Notebook:基于浏览器的交互式程序编写和运行环境,通过切换后台内核支持多种语言。
  • PyCharm:由JetBrains打造的专业Python IDE,分为社区版(免费开源)专业版(付费试用),因此并非“需要购买才能使用”。
  1. 题1(程序基础及Python简介部分):以下不属于高级程序设计语言的是(C )。
    A. C++ B. VB C. 机器语言 D. Python

  2. 题2(程序基础及Python简介部分):以下关于程序设计语言的描述,错误的选项是(C )。
    A. Python语言是一种脚本编程语言 B. 汇编语言是直接操作计算机硬件的编程语言
    C. 程序设计语言经历了机器语言、汇编语言、脚本语言三个阶段
    D. 编译和解释的区别是一次性翻译程序还是每次执行时都要翻译程序

    • A正确:Python是脚本语言(解释执行)。
    • B错误:直接操作硬件的是机器语言,汇编语言需助记符且需翻译才能执行。
    • C错误:正确三个阶段是机器语言→汇编语言→高级语言,不是脚本语言。
    • D正确:编译是一次性翻译,解释是每次执行时翻译。
  3. 题3(程序基础及Python简介部分):关于Python语言的特点,以下选项描述正确的是(B )。
    A. Python语言不支持面向对象 B. Python语言是解释型语言
    C. Python语言是编译型语言
    D. Python语言是非跨平台语言

  4. 题1(Python开发工具部分,填空题):在Python内置集成开发环境IDLE中,可以使用快捷键___F5___运行当前打开的源代码程序。

  5. 题2(Python开发工具部分,填空题):Python源代码程序编译之后,文件的扩展名是什么?.pyc

  6. 题3(Python开发工具部分):下面关于Python相关工具描述错误的是(D )。 A. IDLE是Python解释器自带的一个简易IDE,体积小巧,但功能也相当完备,具备代码编辑、运行、调试等功能
    B. ipython可以看作是一个增强的Python Interpreter,支持变量自动补全、自动缩进,内置了许多很有用的功能和函数
    C. jupyter notebook是一个基于浏览器的交互式程序编写和运行环境,通过切换后台的内核,支持多种语言 D. pycharm是集成式的Python开发环境,功能强大、完善,但是需要购买才能够使用

第一章:Python基础入门

1.1 注释

Python中单行注释使用 # 开头,用于对代码进行解释说明,不会被程序执行。

# 这是一个单行注释
print("Hello")  # 也可以写在代码后面

1.2 变量

变量用于存储数据,在Python中不需要事先声明类型,直接赋值即可。

变量命名规则:

  • 只能包含字母、下划线、数字
  • 不能以数字开头
  • 区分大小写
# 合法的变量名
myNum = 1
myNumber = 2
_Number = 1
_number = 2
the_name = "name"

# 非法的变量名(会报错)
# 1myNum = 1  # 不能以数字开头

赋值操作: 等号左边是变量名,右边是变量的值。

a = 1         # 把1赋值给变量a
b = 1.2
c = "word"
d = 'word'    # 单引号或双引号都可以表示字符串

1.3 基本数据类型

数据类型 英文名称 示例
整型 int a = 1
浮点型 float b = 1.2
字符串 str c = "hello"
布尔型 bool e = True, f = False

布尔值只有两个:True(真)和 False(假)。

1.4 输出(print)

# 输出固定字符串
print("你好,世界")

# 输出变量值
a = 10
print(a)

# 字符串中包含变量(格式化输出)
name = "小明"
print(f"我的名字是{name}")   # 推荐使用f-string
# 或者
print("我的名字是" + name)   # 字符串拼接

特殊字符:

  • \t:制表符(长空格)
  • \n:换行 不换行输出:
print("hello", end="")
print("world")
# 输出:helloworld

1.5 输入(input)

# 输入内容,默认是字符串类型
name = input("请输入你的名字:")

# 输入数字,需要转换类型
age = int(input("请输入你的年龄:"))

1.6 类型转换

# 强制转换类型
a = 1
b = float(a)     # 1 → 1.0
c = str(a)       # 1 → "1"
d = bool(a)      # 1 → True

1.7 随机数

import random

# 随机整数(包含1和100)
a = random.randint(1, 100)

# 随机小数(指定范围)
b = random.uniform(1, 10)

# 随机小数(0到1之间)
c = random.random()

第二章:运算符与表达式

2.1 算术运算符

运算符 作用 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a / b(结果可能是小数)
** 幂运算 a ** 10(a的10次方)
% 取余(求模) a % 2(a除以2的余数)
// 整除 a // b(取商的整数部分)

注意: 如果两个整数做除法,结果可能自动转换为浮点型。

2.2 赋值运算符

a = 1
a += 1      # 等价于 a = a + 1
a -= 1      # 等价于 a = a - 1
a *= 2      # 等价于 a = a * 2
a /= 2      # 等价于 a = a / 2
a **= 10    # 等价于 a = a ** 10

2.3 比较运算符

运算符 含义 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

注意: = 是赋值,== 是比较是否相等,两者不能混淆。

2.4 布尔运算符(逻辑运算符)

运算符 含义 说明
and 两边都为True时结果为True
or 至少一边为True时结果为True
not 取反,True变False,False变True
a = False
b = not a   # b = True

2.5 运算符优先级

可以使用小括号 () 改变运算顺序,嵌套使用即可。

2.6 字符串运算

# 字符串拼接
s = "hello" + " " + "world"   # "hello world"

# 字符串重复
s = "ha" * 3                  # "hahaha"

# 混合使用
s = "ha" * 3 + "!"           # "hahaha!"

第三章:流程控制

3.1 条件判断(if / elif / else)

基本语法:

if 条件:
    # 条件为True时执行的代码
else:
    # 条件为False时执行的代码

Python缩进规则: 使用一个Tab键或4个空格进行缩进,同一层次的代码缩进量必须一致。

示例:判断是否偶数

a = 10
b = a % 2
if b == 0:
    print("是偶数")
else:
    print("不是偶数")

简化写法:

a = 10
if a % 2 == 0:
    print("是偶数")
else:
    print("不是偶数")

多分支判断(elif):

score = int(input("请输入你的分数:"))

if score < 0 or score > 100:
    print("分数不合法")
elif score < 60:
    print("不合格")
elif score < 80:
    print("合格")
else:
    print("优秀")

分支可以嵌套:

if 条件1:
    if 条件2:
        # 嵌套的代码
    else:
        # 嵌套的代码
else:
    # 代码

3.2 循环语句

3.2.1 while循环

a = 0
while a < 10:
    a += 1
    print(a)
print("end")

注意: while循环一定要有循环变量的变化,否则容易形成死循环。

# 死循环示例
while True:
    print("一直执行")

3.2.2 for循环

for循环在Python中更常用,主要用于遍历一个序列。

# 执行10次
for i in range(10):
    print(i)   # 输出0,1,2,...,9

range()函数:

  • range(10):从0到9(左闭右开)
  • range(5, 10):从5到9
  • range(1, 10, 2):从1开始,每次加2,到9结束(步长为2)

遍历列表:

arr = [1, 2, 3, 4, 5]
for i in arr:
    print(i)

遍历字符串:

for ch in "hello":
    print(ch)   # 输出h,e,l,l,o

3.2.3 break和continue

  • break:跳出当前整个循环,循环不再执行。
  • continue:跳过当前这一次循环,继续下一次循环。
# break示例
for i in range(10):
    if i == 5:
        break
    print(i)   # 输出0,1,2,3,4

# continue示例
for i in range(10):
    if i == 5:
        continue
    print(i)   # 输出0,1,2,3,4,6,7,8,9(跳过了5)

3.2.4 循环的else子句

当循环正常结束(没有被break中断)时,会执行else中的代码。

for i in range(5):
    print(i)
    if i == 3:
        break
else:
    print("循环正常结束")   # 如果被break中断,这里不会执行

第四章:数据结构

4.1 字符串(str)

字符串是不可变数据类型,不能直接修改字符串中的某个字符。

4.1.1 索引与切片

s = "my name is xxx"

# 索引(下标从0开始)
print(s[0](@ref)   # 第一个字符 'm'

# 切片:s[起始:结束:步长]
print(s[1:5])     # 下标1到4(不包括5)→ "y na"
print(s[:5])      # 从开头到下标4 → "my na"
print(s[1:])      # 从下标1到结尾 → "y name is xxx"
print(s[:])       # 整个字符串 → "my name is xxx"
print(s[::2])     # 每隔一个取一个
print(s[::-1])    # 反转字符串
print(s[-5:-1])   # 从倒数第5个到倒数第2个(不包括倒数第1个)

4.1.2 常用方法

# 替换
s = s.replace("xxx", "pig")

# 分割(按空格分割成列表)
words = s.split(" ")   # ['my', 'name', 'is', 'pig']

# 拼接(将列表用指定字符串连接)
new_s = " ".join(words)   # "my name is pig"

# 大小写转换
"hello".capitalize()   # 首字母大写 → "Hello"
"hello".title()        # 每个单词首字母大写 → "Hello"
"hello".upper()        # 全部大写 → "HELLO"
"HELLO".lower()        # 全部小写 → "hello"

# 删除空白字符
"  hello  ".lstrip()    # 删除左侧空白 → "hello  "
"  hello  ".rstrip()    # 删除右侧空白 → "  hello"
"  hello  ".strip()     # 删除两侧空白 → "hello"

4.2 列表(list)

列表是可变数据类型,可以随意增删改。

4.2.1 创建列表

arr = [1, 2, 3, 4]
b = 12
mixed = [1, False, "happy", b, [1, 2, 3]]  # 列表可以包含任意类型,甚至可以嵌套

4.2.2 索引与切片

arr = [1, 2, 3, 4]
print(arr[0](@ref)   # 1
print(arr[-1])  # 4(最后一个元素)

# 切片用法与字符串相同
print(arr[1:3])  # [2, 3]

4.2.3 修改元素

arr[0] = 123   # 直接修改(字符串不可以这样操作)

4.2.4 添加元素

arr.append("abc")       # 在末尾添加
arr.insert(1, 't')      # 在下标1的位置插入

4.2.5 删除元素

arr.pop(0)              # 删除并返回下标0的元素
arr.remove("happy")     # 删除匹配到的第一个元素
arr.clear()             # 清空列表
del arr                 # 删除整个列表

4.2.6 排序

a = [4, 2, 1, 3]

# 方式一:直接修改原列表
a.sort()

# 方式二:返回新列表(不修改原列表)
a = sorted(a)

4.2.7 复制列表

a = [1, 2, 3]

# 错误方式(直接赋值,会共享同一份数据)
b = a
a[0] = 100
print(b[0](@ref)   # 100(b也会变)

# 正确方式(使用copy()复制一份新数据)
b = a.copy()
a[0] = 100
print(b[0](@ref)   # 1(b不受影响)

原理说明: 变量名指向内存中的地址,直接赋值相当于让两个变量指向同一块内存区域,修改一个会影响另一个。使用copy()则会创建新的内存区域。

4.2.8 成员判断

arr = [1, False, "happy", 12, [1, 2, 3]]

if 1 in arr:
    print("1在列表中")

if 1 not in arr:
    print("1不在列表中")

4.2.9 嵌套列表的遍历

# 三维列表的遍历
array = [
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
    [[3, 2, 5], [4, 5, 8], [7, 8, 9]],
    [[1, 2, 3], [4, 5, 8], [7, 0, 9]]
]

for a in array:
    for b in a:
        for c in b:
            print(c)

4.3 元组(tuple)

元组使用小括号,与列表类似,但不可修改(不可变数据类型)。

c = (1, 2, "22")

元组可以像列表一样通过索引访问,但不能修改元素。

4.4 集合(set)

集合使用大括号,有两个重要特性:

  • 无序性:元素没有顺序
  • 不重复性:自动去重
s = {1, 3, 3, 4}
print(s)   # {1, 3, 4}(重复的3被自动去掉)

4.5 字典(dict)

字典也使用大括号,由键值对组成。

# 创建字典
d = {"name": "pig", "age": 20}

# 获取所有键
print(d.keys())      # ['name', 'age']

# 获取所有值
print(d.values())    # ['pig', 20]

# 获取所有键值对
print(d.items())     # [('name', 'pig'), ('age', 20)]

4.5.1 遍历字典

for k, v in d.items():
    print(k, v)   # name pig / age 20

4.5.2 访问和修改

# 访问
print(d["name"])     # "pig"

# 修改
d["name"] = "fork"

# 删除键值对
del d["name"]

# 清空字典
d.clear()

# 删除整个字典
del d

4.5.3 空字典 vs 空集合

d = {}      # 空字典(优先解释为字典)
s = set()   # 空集合(必须这样写)

第五章:函数

5.1 定义和调用函数

函数使用 def 关键字定义,可以将重复使用的代码封装起来。

# 定义函数
def day():
    print("起床了")
    print("吃早饭")
    print("上班")
    print("回家")
    print("睡觉")

# 调用函数
day()

5.2 参数和返回值

# 判断一个数是否是偶数
def is_even(n):
    if n % 2 == 0:
        return True
    else:
        return False

# 简化写法
def is_even(n):
    return n % 2 == 0

# 调用
result = is_even(15)   # result = False

形参 vs 实参:

  • n 是形参(定义函数时使用的参数名)
  • 15 是实参(调用函数时传入的具体值)

5.3 作用域

  • 全局变量:在函数外面定义的变量,作用域是整个程序。
  • 局部变量:在函数内部定义的变量,只在函数内部有效。
day = 1   # 全局变量

def change_day():
    global day   # 声明使用全局变量
    day = 2      # 修改全局变量

change_day()
print(day)   # 2

5.4 函数注释

良好的函数注释可以帮助理解函数的功能。

def put_color(img, x_p, y_p, long, color):
    """
    填充一定范围内的颜色
    :param img: 图片名
    :param x_p: 填充正方形的x位置
    :param y_p: 填充正方形的y位置
    :param long: 正方形的边长
    :param color: 填充颜色
    :return: 无返回值
    """
    if long == 0:
        img.putpixel((x_p, y_p), color)
    for n in range(long):
        for m in range(long):
            img.putpixel((x_p + n, y_p + m), color)

5.5 主函数入口

def main():
    for i in range(10):
        a()

def a():
    print("a")
    # 调用b()和c()...

def b():
    pass

def c():
    pass

if __name__ == '__main__':
    main()

if __name__ == '__main__': 的作用:判断当前文件是否是被直接运行的,如果是,则执行main();如果是被其他文件导入,则不执行。

5.6 递归函数

函数调用自身称为递归,需要注意设置终止条件,否则会造成无限循环。

# 递归示例:计算阶乘
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

5.7 多返回值与拆包

def g():
    return 1, 2, 3

# 接收返回值(返回的是元组)
result = g()          # (1, 2, 3)

# 拆包(分别接收)
a, b, c = g()        # a=1, b=2, c=3

拆包不仅适用于元组,也适用于列表、集合、字典。

5.8 参数类型

5.8.1 不定长参数

# 单星号 *args:接收任意数量的位置参数(打包成元组)
def func(*args):
    print(args)

func(1, 2, 3, 6, 9)   # (1, 2, 3, 6, 9)

# 双星号 **kwargs:接收任意数量的关键字参数(打包成字典)
def func2(**kwargs):
    print(kwargs)

func2(name="张三", age=18)   # {'name': '张三', 'age': 18}

5.8.2 默认参数

def func(age=18):
    print(age)

func()       # 18(使用默认值)
func(20)     # 20(使用传入的值)

5.8.3 参数顺序

四种参数必须按照以下顺序书写:

  1. 普通参数
  2. 默认参数
  3. 包裹位置参数(*args
  4. 包裹关键字参数(**kwargs

附录:常见问题与提示

  1. Python版本:本文档基于Python 3.7.2编写,建议使用Python 3.x版本。
  2. 编辑器:推荐使用PyCharm进行开发,功能强大且免费。
  3. 缩进:Python严格要求缩进,建议使用4个空格或1个Tab,保持统一。
  4. 字符串不可变:字符串的字符不能直接修改,但可以通过切片、替换等方法生成新的字符串。
  5. 列表赋值:直接赋值会共享内存,使用copy()可以复制一份独立的数据。 #期末