Python3 教程

从零开始,系统学习 Python3 编程核心知识

开始学习 前往题库 在线编程

Python 简介

什么是 Python?

Python 是一种高级编程语言,由 Guido van Rossum 于 1991 年创建。它以简洁易懂的语法和强大的功能著称,被广泛应用于 Web 开发、数据分析、人工智能、科学计算等领域。

Python 的特点
  • 简洁易学:语法简洁,接近自然语言,适合初学者入门
  • 功能强大:拥有丰富的标准库和第三方库
  • 跨平台:可以在 Windows、Linux、macOS 等系统上运行
  • 解释执行:无需编译,直接运行,调试方便
  • 面向对象:支持面向对象编程范式
Python 是青少年编程学习的优秀选择,也是计算机科学竞赛(如 CSP、NOIP)的可选语言之一。

Python 程序的运行方式

  1. 交互式模式:在命令行直接输入 Python 代码,实时执行
  2. 脚本模式:将代码保存为 .py 文件,通过 python 命令执行
# 交互式模式示例
>>> print("Hello World")
Hello World

# 脚本模式示例 (保存为 hello.py)
# python hello.py

语法基础

第一个 Python 程序

让我们从一个经典的 "Hello World" 程序开始:

print("Hello World")
程序解析
  • print():Python 的输出函数,用于向屏幕输出内容
  • "Hello World":字符串,用引号括起来
  • Python 不需要分号结尾,也不需要 main() 函数
Python 使用缩进来表示代码块,通常使用 4 个空格或 1 个 Tab 作为缩进。保持缩进一致非常重要!

注释

注释用于解释代码,不会被解释器执行。良好的注释习惯是编程的基本素养。

单行注释
# 这是单行注释
print("Hello")  # 也可以放在代码后面
多行注释
'''
   这是多行注释
   可以跨越多行
   用于较长的说明
'''

"""
   也可以使用双引号
"""

输入输出

Python 提供了简单直观的输入输出方式:

输出 print()
# 输出字符串
print("Hello World")

# 输出数字
print(123)

# 输出多个内容
print("x =", 10)
print("a", "b", "c")  # 默认用空格分隔

# 格式化输出
x = 10
print(f"x = {x}")  # f-string 格式化(推荐)
print("x = {}".format(x))
print("x = %d" % x)
输入 input()
# input() 返回字符串
name = input("请输入你的名字: ")
print("你好,", name)

# 读取数字需要类型转换
age = int(input("请输入你的年龄: "))
height = float(input("请输入你的身高: "))
input() 返回的是字符串类型。如果需要数字,必须使用 int()float() 进行类型转换。

常用库函数

Python 拥有丰富的标准库,以下是一些常用库:

库名功能
math数学函数 (sqrt, pow, sin 等)
random随机数生成
datetime日期时间处理
jsonJSON 数据处理
os操作系统接口
sys系统相关功能
import math

# 使用数学函数
print(math.sqrt(16))  # 4.0
print(math.pow(2, 10))  # 1024.0
print(math.pi)  # 3.141592653589793

变量与数据类型

什么是变量?

变量是程序中用于存储数据的容器。每个变量都有:

  • 名称:用于标识变量的标识符
  • :变量中存储的实际数据
  • 类型:决定了变量可以存储什么类型的数据(Python 自动推断)

基本数据类型

整型 (int)
a = 10           # 正整数
b = -5            # 负整数
c = 0             # 零
d = 1_000_000     # Python3.6+,下划线分隔(等于 1000000)
浮点型 (float)
x = 3.14
y = -0.5
z = 1e10          # 科学计数法,等于 10000000000.0
布尔型 (bool)
flag1 = True
flag2 = False
复数型 (complex)
c = 3 + 4j       # 3 是实部,4j 是虚部
类型说明示例
int整数10, -5, 0
float浮点数3.14, -0.5
bool布尔值True, False
complex复数3+4j

变量命名规则

  • 只能包含字母、数字和下划线
  • 必须以字母或下划线开头
  • 不能使用 Python 关键字(如 if, for, while, class 等)
  • 区分大小写(sumSum 是不同的变量)
命名规范建议
# 好的命名
student_count = 30        # 小写+下划线(推荐)
studentCount = 30         # 小驼峰
MAX_SIZE = 100            # 常量用大写

# 不好的命名
a, b, c                    # 无意义的名字
n1, n2, n3                 # 难以理解
if = 10                    # 错误:使用了关键字

类型转换

# 字符串转整数
a = int("123")        # a = 123

# 整数转字符串
b = str(123)          # b = "123"

# 字符串转浮点数
c = float("3.14")     # c = 3.14

# 浮点数转整数(截断)
d = int(3.7)          # d = 3

# 四舍五入
e = round(3.7)        # e = 4

# 类型查询
print(type(123))      # <class 'int'>
print(type(3.14))      # <class 'float'>
字符串转整数时,如果字符串不是有效的数字格式,会抛出 ValueError 异常。

运算符

算术运算符

运算符功能示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法7 / 23.5(总是浮点数)
//整除7 // 23
%取模(求余数)7 % 21
**幂运算2 ** 101024
Python 的 / 除法总是返回浮点数,如需整数除法使用 //

比较运算符

运算符功能示例
==等于a == b
!=不等于a != b
>大于a > b
<小于a < b
>=大于等于a >= b
<=小于等于a <= b
print(10 > 5)    # True
print(3 == 3.0)  # True(值相等)
print(3 is 3.0)  # False(身份不同)

逻辑运算符

运算符功能说明
and逻辑与两个条件都为真时结果为真
or逻辑或至少一个条件为真时结果为真
not逻辑非取反,真变假,假变真
age = 20
has_id = True

# 逻辑与
if age >= 18 and has_id:
    print("可以进入")

# 逻辑或
if age < 12 or age > 60:
    print("可以享受优惠")

# 逻辑非
is_raining = False
if not is_raining:
    print("天气不错")
Python 的 andor 支持短路求值,并且返回的是实际的值而非布尔值。

赋值运算符

运算符示例等价于
=a = b赋值
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba = a / b
//=a //= ba = a // b
**=a **= ba = a ** b

成员运算符与身份运算符

成员运算符 in
# 检查元素是否在序列中
fruits = ["苹果", "香蕉", "橙子"]
print("香蕉" in fruits)      # True
print("葡萄" not in fruits)  # True
身份运算符 is
# 检查两个变量是否引用同一个对象
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(a is b)    # True(同一对象)
print(a is c)    # False(值相同但不同对象)
print(a == c)    # True(值相同)

字符串

字符串的创建

# 使用单引号
s1 = 'Hello'

# 使用双引号
s2 = "World"

# 使用三引号(可以包含多行)
s3 = '''这是一个
可以跨行的字符串'''

# 空字符串
s4 = ""

字符串的基本操作

s = "Hello World"

# 长度
print(len(s))          # 11

# 访问字符(下标从0开始)
print(s[0])            # 'H'
print(s[-1])           # 'd'(最后一个字符)

# 切片
print(s[0:5])          # 'Hello'
print(s[6:])           # 'World'
print(s[:5])           # 'Hello'
print(s[::2])          # 'HloWrd'(步长为2)
print(s[::-1])         # 'dlroW olleH'(反转)

# 字符串连接
s1 = "Hello"
s2 = "World"
print(s1 + " " + s2)   # 'Hello World'

# 重复
print("-" * 20)        # '--------------------'
字符串是不可变类型,不能直接修改字符串中的某个字符。如需修改,需要创建新字符串。

字符串常用方法

s = "Hello World"

# 大小写转换
print(s.upper())           # 'HELLO WORLD'
print(s.lower())           # 'hello world'
print(s.capitalize())      # 'Hello world'
print(s.title())           # 'Hello World'

# 查找和替换
print(s.find("World"))     # 6(找不到返回-1)
print(s.index("World"))    # 6(找不到会报错)
print(s.replace("World", "Python"))  # 'Hello Python'
print(s.count("o"))        # 2

# 判断开头和结尾
print(s.startswith("Hello"))  # True
print(s.endswith("World"))     # True

# 分割和连接
s2 = "apple,banana,orange"
print(s2.split(","))       # ['apple', 'banana', 'orange']
print("-".join(["a", "b", "c"]))  # 'a-b-c'

# 去空格
s3 = "  hello  "
print(s3.strip())         # 'hello'(去除两端空格)
print(s3.lstrip())        # 'hello  '(去除左边)
print(s3.rstrip())        # '  hello'(去除右边)

# 判断类型
print("123".isdigit())     # True
print("abc".isalpha())     # True
print("abc123".isalnum())  # True

字符串格式化

f-string(推荐)
name = "小明"
age = 15
score = 95.5

print(f"姓名: {name}, 年龄: {age}")
print(f"成绩: {score:.1f}")  # 保留1位小数
print(f"明年年龄: {age + 1}")
format() 方法
print("姓名: {}, 年龄: {}".format("小明", 15))
print("成绩: {:.1f}".format(95.567))
% 格式化(旧式)
print("姓名: %s, 年龄: %d" % ("小明", 15))

列表

什么是列表?

列表是 Python 中最常用的可变序列,可以存储任意类型的数据。

# 创建列表
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]
empty = []

列表的基本操作

nums = [1, 2, 3, 4, 5]

# 访问元素
print(nums[0])         # 1
print(nums[-1])        # 5

# 修改元素
nums[0] = 10           # [10, 2, 3, 4, 5]

# 切片
print(nums[1:4])       # [2, 3, 4]

# 长度
print(len(nums))       # 5

列表常用方法

nums = [1, 2, 3]

# 添加元素
nums.append(4)         # [1, 2, 3, 4](末尾添加)
nums.insert(0, 0)      # [0, 1, 2, 3, 4](指定位置插入)
nums.extend([5, 6])    # [0, 1, 2, 3, 4, 5, 6](扩展列表)

# 删除元素
nums.pop()             # 删除并返回最后一个元素
nums.pop(0)            # 删除并返回指定位置元素
nums.remove(3)         # 删除第一个值为3的元素
del nums[0]            # 删除指定位置元素

# 其他操作
nums.sort()            # 排序(原地修改)
nums.reverse()         # 反转列表
print(nums.index(3))   # 查找元素索引
print(nums.count(3))   # 统计元素出现次数
print(3 in nums)       # 检查元素是否存在

# 列表长度、最大值、最小值
print(len(nums))
print(max(nums))
print(min(nums))
print(sum(nums))

列表推导式

列表推导式是 Python 的特色功能,可以简洁地创建列表:

# 基本语法
 squares = [x**2 for x in range(10)]
 # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 带条件
evens = [x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]

# 嵌套
matrix = [[i*j for j in range(3)] for i in range(3)]
# [[0, 0, 0], [0, 1, 2], [0, 2, 4]]
列表推导式比传统的 for 循环更简洁高效,但在复杂情况下应该优先考虑可读性。

元组

什么是元组?

元组与列表类似,但它是不可变的(创建后不能修改)。

# 创建元组
t1 = (1, 2, 3)
t2 = ("a", "b", "c")
t3 = (1,)              # 单个元素需要加逗号
t4 = ()               # 空元组

# 访问元素
print(t1[0])           # 1
print(t1[1:3])         # (2, 3)
元组 vs 列表:元组不可变,更安全,且性能略好;列表可变,更灵活。根据需求选择。

元组的基本操作

t = (1, 2, 3, 2, 3, 2)

# 长度、索引、计数
print(len(t))          # 6
print(t.index(2))      # 1(第一个2的位置)
print(t.count(2))      # 3(2出现的次数)

# 遍历
for item in t:
    print(item)

# 判断存在
print(2 in t)          # True

元组的打包与解包

# 打包
t = (1, 2, 3)

# 解包
a, b, c = t
print(a, b, c)         # 1 2 3

# 交换变量(Python特色)
x, y = 1, 2
x, y = y, x           # x=2, y=1

# 多个返回值
def get_point():
    return (3, 4)

x, y = get_point()

字典

什么是字典?

字典是 Python 中的键值对数据结构,通过键来访问值,查找效率高。

# 创建字典
person = {
    "name": "小明",
    "age": 15,
    "score": 95.5
}

# 也可以使用 dict()
d = dict(name="小红", age=16)

# 空字典
empty = {}

字典的基本操作

person = {"name": "小明", "age": 15, "score": 95.5}

# 访问值
print(person["name"])        # "小明"
print(person.get("age"))      # 15
print(person.get("height", 170))  # 170(键不存在返回默认值)

# 添加/修改
person["height"] = 170       # 添加新键值对
person["age"] = 16           # 修改已有键的值

# 删除
del person["score"]          # 删除键值对
age = person.pop("age")      # 删除并返回值

# 遍历
for key in person:
    print(key, person[key])

for key, value in person.items():
    print(key, value)

for value in person.values():
    print(value)
字典的键必须是不可变类型(如字符串、数字、元组),不能使用列表作为键。

字典常用方法

d = {"a": 1, "b": 2, "c": 3}

# 常用方法
print(len(d))                # 3
print("a" in d)              # True
print(list(d.keys()))       # ['a', 'b', 'c']
print(list(d.values()))      # [1, 2, 3]
print(list(d.items()))       # [('a', 1), ('b', 2), ('c', 3)]

# 更新字典
d.update({"d": 4, "e": 5})   # 合并另一个字典

# 清空
d.clear()

分支语句

if 语句

# 基本 if 语句
if 条件:
    # 条件为真时执行
    pass

# if-else 语句
score = 85
if score >= 60:
    print("及格")
else:
    print("不及格")

# if-elif-else 语句
score = 85
if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 60:
    print("及格")
else:
    print("不及格")
Python 中使用 elif 而不是 else if。注意代码块的缩进!

三元表达式

# 语法:值1 if 条件 else 值2
x = 10
y = 20
max_val = x if x > y else y

# 求绝对值
num = -5
abs_val = num if num >= 0 else -num

循环语句

for 循环

for 循环用于遍历可迭代对象:

# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(fruit)

# 遍历字典
person = {"name": "小明", "age": 15}
for key in person:
    print(f"{key}: {person[key]}")

# 使用 range()
for i in range(5):
    print(i)          # 0, 1, 2, 3, 4

for i in range(1, 6):
    print(i)          # 1, 2, 3, 4, 5

for i in range(0, 10, 2):
    print(i)          # 0, 2, 4, 6, 8(步长为2)

# 计算1到100的和
total = 0
for i in range(1, 101):
    total += i
print(total)          # 5050

while 循环

while 循环在条件为真时重复执行:

# 语法
while 条件:
    循环体

# 示例:计算1到100的和
total = 0
i = 1
while i <= 100:
    total += i
    i += 1
print(total)          # 5050

# 猜数字游戏
import random
target = random.randint(1, 100)
while True:
    guess = int(input("请猜一个数字: "))
    if guess == target:
        print("恭喜答对了!")
        break
    elif guess < target:
        print("太小了")
    else:
        print("太大了")

break 和 continue

# break: 退出整个循环
for i in range(10):
    if i == 5:
        break
    print(i)          # 0, 1, 2, 3, 4

# continue: 跳过本次循环
for i in range(5):
    if i == 2:
        continue
    print(i)          # 0, 1, 3, 4

# else 子句(循环正常结束时执行)
for i in range(5):
    print(i)
else:
    print("循环正常结束")
Python 的 for 循环可以带 else 子句,当循环正常结束(非 break 退出)时会执行。

函数

函数的基本概念

函数是一段完成特定任务的代码块,可以被多次调用。使用函数可以:

  • 提高代码复用性
  • 使程序结构更清晰
  • 便于调试和维护

函数定义与调用

# 定义函数
def say_hello():
    print("Hello!")

# 调用函数
say_hello()

# 带参数的函数
def greet(name):
    print(f"你好, {name}!")

greet("小明")

# 带返回值的函数
def add(a, b):
    return a + b

result = add(3, 5)
print(result)          # 8

默认参数与关键字参数

# 默认参数
def power(base, exp=2):
    return base ** exp

print(power(3))        # 9 (3^2)
print(power(2, 10))    # 1024 (2^10)

# 关键字参数
def print_info(name, age):
    print(f"姓名: {name}, 年龄: {age}")

print_info(age=15, name="小明")  # 按名称传递参数
默认参数必须放在参数列表的末尾,且不要使用可变对象(如列表)作为默认参数值。

可变参数

# *args - 接收任意数量的位置参数
def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2, 3))          # 6
print(sum_all(1, 2, 3, 4, 5))   # 15

# **kwargs - 接收任意数量的关键字参数
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="小明", age=15, score=95)

递归函数

递归是函数调用自身的过程:

# 阶乘
def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)

print(factorial(5))     # 120

# 斐波那契数列
def fib(n):
    if n <= 2:
        return 1
    return fib(n - 1) + fib(n - 2)

print(fib(10))          # 55

# 求和 1+2+...+n
def sum_n(n):
    if n == 1:
        return 1
    return n + sum_n(n - 1)

print(sum_n(100))       # 5050
递归必须有终止条件,否则会导致无限递归。递归深度过大会导致栈溢出。

类与对象

什么是面向对象编程?

面向对象编程(OOP)是一种编程范式,通过"类"和"对象"来组织代码。

  • :创建对象的模板,定义了对象的属性和方法
  • 对象:类的实例,具有具体的属性值

类的定义与使用

# 定义类
class Student:
    # 初始化方法(构造器)
    def __init__(self, name, age):
        self.name = name      # 实例属性
        self.age = age
        self.score = 0
    
    # 实例方法
    def introduce(self):
        print(f"大家好,我叫{self.name},今年{self.age}岁")
    
    def set_score(self, score):
        if 0 <= score <= 100:
            self.score = score

# 创建对象
stu1 = Student("小明", 15)
stu2 = Student("小红", 16)

# 调用方法
stu1.introduce()
stu1.set_score(95)
print(stu1.name, stu1.score)

类的继承

# 父类
class Person:
    def __init__(self, name):
        self.name = name
    
    def say_hello(self):
        print(f"你好,我叫{self.name}")

# 子类
class Student(Person):
    def __init__(self, name, school):
        super().__init__(name)  # 调用父类构造器
        self.school = school
    
    def say_hello(self):
        super().say_hello()      # 调用父类方法
        print(f"我在{self.school}上学")

stu = Student("小明", "第一中学")
stu.say_hello()

文件操作

读取文件

# 读取整个文件
with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# 按行读取
with open("test.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

# 读取所有行到列表
with open("test.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        print(line.strip())
使用 with 语句可以自动关闭文件,确保资源正确释放。

写入文件

# 写入文件(覆盖)
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("第一行\n")
    f.write("第二行\n")

# 追加写入
with open("output.txt", "a", encoding="utf-8") as f:
    f.write("追加的内容\n")

# 写入多行
lines = ["第一行", "第二行", "第三行"]
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("\n".join(lines))

JSON 文件操作

import json

# 写入 JSON
data = {"name": "小明", "age": 15, "scores": [95, 90, 88]}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

# 读取 JSON
with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)
    print(data["name"])

在线编程

Python 在线编辑器

无需安装软件,直接在浏览器中打开 Python 在线编辑器,即可编写和运行 Python 代码!

在线工具是测试版本,支持实时编译运行代码。如遇在线工具无法使用,请下载下方离线版软件。

离线编程工具下载

如果你更习惯在本地电脑上编程,可以下载以下离线编程工具,无需联网即可使用。

IDLE

Python 官方自带的轻量级 IDE,安装 Python 后即可使用

前往下载
PyCharm 社区版

JetBrains 出品的专业 Python IDE,功能强大且免费

前往下载
推荐初学者使用 IDLE,安装简单且内置 Python 解释器,开箱即用。准备参加 GESP 考试的同学,建议参考 GESP 考点编译环境说明及软件下载,使用与考试一致的编程环境。

恭喜你完成 Python3 教程学习!

继续学习更多高级内容,挑战编程竞赛!

微信客服二维码

扫码添加微信客服 (加好友时请备注:小码豆)