Python 编程入门:18 个核心代码示例与算法解析
前言
对于编程初学者而言,理解基础语法和常见算法模式是构建技术大厦的基石。许多新手往往被复杂的英文术语和庞大的代码库所吓倒,但实际上,绝大多数程序都是由基础的语句和逻辑组合而成的。本文精选了 18 个在 Python 及数据结构中极具代表性的代码示例,涵盖循环控制、列表操作、枚举使用、素数判断以及顺序表算法等核心知识点。通过深入分析这些示例,读者可以掌握编程的基本逻辑,为后续学习爬虫、数据分析或人工智能打下坚实基础。
本文整理了 Python 及数据结构算法的 18 个核心代码示例,涵盖循环控制、列表操作、枚举、素数判断及顺序表处理等基础知识点。内容包含代码实现、逻辑解析及复杂度分析,旨在帮助初学者理解编程基本结构,掌握常见算法思想,为后续深入学习爬虫、数据分析或人工智能打下坚实基础。

对于编程初学者而言,理解基础语法和常见算法模式是构建技术大厦的基石。许多新手往往被复杂的英文术语和庞大的代码库所吓倒,但实际上,绝大多数程序都是由基础的语句和逻辑组合而成的。本文精选了 18 个在 Python 及数据结构中极具代表性的代码示例,涵盖循环控制、列表操作、枚举使用、素数判断以及顺序表算法等核心知识点。通过深入分析这些示例,读者可以掌握编程的基本逻辑,为后续学习爬虫、数据分析或人工智能打下坚实基础。
在 Python 中,for...else 结构常用于遍历查找。当循环正常结束(未被 break 中断)时执行 else 块。这非常适合用于'查找是否存在'的场景。
numbers = [2, 4, 6, 8, 1]
for number in numbers:
if number % 2 == 1:
print(number)
break
else:
print("No odd numbers")
解析:如果找到奇数,打印并跳出循环,else 不执行;如果遍历完所有数字都没找到奇数,则执行 else 输出提示。
处理用户输入并进行计算是编程中最常见的任务之一。注意处理输入类型转换。
# 用户输入数字
num1 = input('输入第一个数字:')
num2 = input('输入第二个数字:')
# 求和
sum_result = float(num1) + float(num2)
# 显示计算结果
print('数字 {0} 和 {1} 相加结果为:{2}'.format(num1, num2, sum_result))
解析:input() 返回字符串,必须转换为 float 或 int 才能进行数学运算。使用 format 方法格式化输出更清晰。
利用标准库 random 模块可以轻松生成指定范围内的随机整数。
import random
print(random.randint(0, 9))
解析:randint(a, b) 函数返回一个包含 a 和 b 的随机整数。每次运行可能得到不同结果,适用于模拟、游戏或测试数据生成。
使用解包操作符 * 可以将列表展开为独立的参数。
my_list = [1, 2, 3, 4]
print(my_list) # [1, 2, 3, 4]
print(*my_list) # 1 2 3 4
解析:*my_list 将列表元素解包,使得它们可以作为独立参数传递给函数,例如 print(*list) 等同于 print(1, 2, 3, 4)。
利用序列解包特性,可以快速提取列表中间的子集。
_, *elements_in_the_middle, _ = [1, 2, 3, 4, 5, 6, 7, 8]
print(elements_in_the_middle) # [2, 3, 4, 5, 6, 7]
解析:_ 丢弃首尾元素,*elements_in_the_middle 捕获中间所有剩余元素。这是一种简洁的切片替代写法。
Python 支持多重赋值,可在一行内完成多个变量的初始化。
a, b, c = 1, 2, 3
print(a, b, c)
解析:右侧元组按顺序赋值给左侧变量,无需分步声明,提高了代码简洁性。
使用内置方法 clear() 可以高效清空列表内容。
RUNOOB = [6, 0, 4, 1]
print('清空前:', RUNOOB)
RUNOOB.clear()
print('清空后:', RUNOOB)
解析:clear() 方法直接修改原列表对象,将其长度置为 0,比重新赋值为空列表更高效。
枚举类型用于定义一组相关的常量,增强代码可读性和安全性。
from enum import Enum
class Status(Enum):
NO_STATUS = -1
NOT_STARTED = 0
IN_PROGRESS = 1
COMPLETED = 2
print(Status.IN_PROGRESS.name) # IN_PROGRESS
print(Status.COMPLETED.value) # 2
解析:通过类继承 Enum 定义状态,成员可通过 .name 或 .value 访问,避免魔法数字的使用。
字符串乘法运算符 * 可用于快速复制文本。
name = "Banana"
print(name * 4) # BananaBananaBananaBanana
解析:这是 Python 特有的语法糖,常用于生成占位符、分隔线或重复文本模式。
利用 calendar 模块可以获取特定年月历法信息。
import calendar
monthRange = calendar.monthrange(2016, 9)
print(monthRange)
解析:monthrange(year, month) 返回元组 (weekday, days)。第一个元素表示当月第一天是星期几(0-6),第二个元素是该月总天数。
素数判断是经典的算法入门题,涉及嵌套循环和取模运算。
lower = int(input("输入区间最小值: "))
upper = int(input("输入区间最大值: "))
for num in range(lower, upper + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
print(num)
解析:外层循环遍历范围,内层循环检查因子。若内层循环未触发 break(即找到因子),则说明是素数。注意 for...else 在此处的妙用。
函数定义中可使用命名参数来明确参数含义,防止顺序错误。
def subtract(a, b):
return a - b
print(subtract(1, 3)) # -2
print(subtract(b=3, a=1)) # -2
解析:调用时使用 b=3, a=1 可以忽略位置顺序,提高代码的可读性和健壮性。
以下示例展示了 C/C++ 风格的数据结构操作,体现了算法设计中对时间和空间复杂度的考量。
要求时间复杂度 O(n),空间复杂度 O(1)。采用双指针法,从两端向中间扫描并交换。
void move(SqList &L)
{
int i = 0, j = L.length - 1, k;
ElemType temp;
while(i < j)
{
// 奇数从前向后找
while(L.data[i] % 2 == 1)
i++;
// 偶数从后往前找
while(L.data[j] % 2 == 0)
j--;
if(i < j)
{
temp = L.data[i];
L.data[i] = L.data[j];
L.data[j] = temp;
}
}
}
解析:左指针找偶数停下,右指针找奇数停下,交换后继续。直到指针相遇。此算法只需遍历一次数组。
原地逆置顺序表,空间复杂度 O(1)。
void reverse(SqList &L)
{
int i;
ElemType x;
// 只扫描前半部分
for(i = 0; i < L.length / 2; i++)
{
x = L.data[i];
L.data[i] = L.data[L.length - i - 1];
L.data[L.length - i - 1] = x;
}
}
解析:首尾对称交换。只需遍历到中间位置即可,避免了重复交换。
删除最小值并用末尾元素填补,保持紧凑。
bool Delete_Min(SqList &L, ElemType &value)
{
if(L.length == 0)
return false;
value = L.data[0];
int pos = 0;
int i;
for(i = 1; i < L.length; i++)
{
if(L.data[i] < value)
{
value = L.data[i];
pos = i;
}
}
L.data[pos] = L.data[L.length - 1];
L.length--;
return true;
}
解析:先遍历找到最小值及其下标,然后将最后一个元素覆盖该位置,最后长度减一。
高效删除区间内的元素,保持相对顺序。
void del_xy(SqList &L, ElemType x, ElemType y)
{
int i = 0, k = 0;
while(i < L.length)
{
if(L.data[i] >= x && L.data[i] <= y)
k++;
else
L.data[i - k] = L.data[i];
}
L.length = L.length - k;
}
解析:使用计数器 k 记录被删除的元素个数。保留有效元素时,将其向前移动 k 位。最终更新长度为原长减去删除数。
嵌套循环的经典应用,控制输出格式。
for i in range(1, 10):
for j in range(1, i + 1):
print('{}x{}={} '.format(j, i, i * j), end='')
print()
解析:外层控制行数,内层控制列数。end='' 保证不换行,每行结束后单独 print()。
虽然代码允许随意命名,但良好的命名习惯能极大提升维护效率。建议使用有意义的缩写,如 VoltageValue 而非 abc。遵循驼峰命名法或下划线命名法保持一致。
在实际开发中,输入可能不符合预期。建议在关键输入处增加 try-except 块,防止程序因非法输入崩溃。
对于大数据量处理,应关注算法的时间复杂度。例如上述顺序表操作均为 O(n),优于 O(n^2) 的暴力解法。在 Python 中,尽量使用内置函数而非手写循环,因为底层实现通常经过优化。
编程能力的提升依赖于持续的练习。建议按照以下阶段进阶:
编程并非高不可攀的技能,而是逻辑思维的训练工具。通过掌握上述基础代码片段和算法思想,你已经迈出了坚实的一步。记住,代码的正确性不仅在于运行无误,更在于逻辑清晰、易于维护。希望这份整理能帮助你在编程之路上走得更稳更远。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online