1. 判断素数
判断一个数字是否为素数是Python编程中的经典问题。素数是指只能被1和本身整除的自然数。以下代码演示了如何判断一个数是否为素数。
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
代码解释:
第2行:如果num小于2,则它不是素数,直接返回False。
第3行:从2到num开根号向上取整的整数范围内遍历每个数字。
第4行:如果num可以被当前数字整除,则num不是素数,直接返回False。
第6行:如果num没有被整除,说明它是素数,返回True。
运行is_prime(7),结果为True。
1.1 参考链接
2. 冒泡排序
冒泡排序是一种经典的排序算法,其基本思想是重复地遍历要排序的数组,每次遍历比较相邻的两个元素,如果它们的顺序错误就交换它们的位置,直到没有任何一对数字需要交换为止。以下代码演示了如何实现冒泡排序。
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
代码解释:
第2行:定义数组arr的长度为n。
第3-5行:遍历数组,每次从第一个元素开始比较相邻的元素,如果顺序错误就交换它们的位置,直到遍历到倒数第i个元素,即最后一个未排序的元素。
第6行:返回排好序的数组。
运行bubble_sort([64, 34, 25, 12, 22, 11, 90]),结果为[11, 12, 22, 25, 34, 64, 90]。
2.1 参考链接
3. 快速排序
快速排序是一种常用的排序算法,其基本思想是选取一个基准元素(通常选择数组的第一个元素或最后一个元素),将数组分成两个部分,一部分包含比基准元素小的所有元素,另一部分包含比基准元素大的所有元素,然后再按照此方法对这两部分递归排序,直到整个序列有序。以下代码演示了如何实现快速排序。
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = [x for x in arr[1:] if x <= pivot]
right = [x for x in arr[1:] if x > pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
代码解释:
第2行:如果数组长度小于等于1,直接返回数组。
第3行:选取数组的第一个元素作为基准元素。
第4-5行:将数组分成两个部分,分别包含比基准元素小和比基准元素大的所有元素。
第6行:递归地对左半部分排序。
第7行:将基准元素与左半部分和右半部分排序后的数组合并。
运行quick_sort([64, 34, 25, 12, 22, 11, 90]),结果为[11, 12, 22, 25, 34, 64, 90]。
3.1 参考链接
4. 斐波那契数列
斐波那契数列是一个经典的数列,它的第0项是0,第1项是1,后面的每一项都是前面两项的和。以下代码演示了如何生成斐波那契数列。
def fibonacci_sequence(n):
if n == 0:
return []
if n == 1:
return [0]
if n == 2:
return [0, 1]
else:
fib = fibonacci_sequence(n - 1)
fib.append(fib[-1] + fib[-2])
return fib
代码解释:
第2行:如果n等于0,则返回空数组。
第3行:如果n等于1,则返回只含有第0项的数组。
第4行:如果n等于2,则返回含有第0项和第1项的数组。
第5行:递归地计算前n-1项斐波那契数列。
第6行:将当前项(即前一项和前两项的和)添加到数组末尾。
第7行:返回计算出的斐波那契数列。
运行fibonacci_sequence(10),结果为[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]。
4.1 参考链接
5. 最大公约数和最小公倍数
最大公约数和最小公倍数是数学中的两个重要概念,在Python中可以用以下代码计算。
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
def lcm(a, b):
return a * b // gcd(a, b)
代码解释:
第2行:如果b等于0,a即是最大公约数。
第5行:如果b不等于0,将a除以b的余数作为新的a,b作为新的b继续递归。
第8行:最小公倍数为两数之积除以最大公约数。
运行gcd(54, 24),结果为6;运行lcm(54, 24),结果为216。
5.1 参考链接
6. 简单计算器
计算器是经典的编程练手项目之一,以下代码演示了如何实现一个简单的计算器。
def calculator():
a = float(input('输入第一个数字:'))
op = input('输入运算符(+、-、*、/):')
b = float(input('输入第二个数字:'))
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '*':
return a * b
elif op == '/':
return a / b
else:
return '运算符错误'
print(calculator())
代码解释:
第2-4行:分别输入第一个数字、运算符和第二个数字。
第5-11行:根据运算符执行相应的计算并返回结果,如果运算符不是'+''-''*''/',返回错误信息。
第13行:运行calculator()函数并输出结果。
输入5、+、3,结果为8.0。
6.1 参考链接
7. 水仙花数
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个三位数,它的每个位上的数字的三次幂之和等于它本身:1^3 + 5^3 + 3^3 = 153。以下代码演示了如何判断一个数是否为水仙花数。
def is_armstrong(num):
n = len(str(num))
total = 0
for digit in str(num):
total += int(digit) ** n
return num == total
print(is_armstrong(153))
代码解释:
第2行:计算数字的位数。
第3行:初始化总和为0。
第4-6行:遍历数字的各位数,将每位数的n次方加到总和中。
第7行:如果总和等于数字本身,即为水仙花数,返回True。
第9行:运行is_armstrong(153)函数并输出结果。
结果为True。
7.1 参考链接
8. 阶乘
阶乘是指从1到n所有正整数的乘积,以n!表示,0!等于1。以下代码演示了如何计算阶乘。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))
代码解释:
第2行:如果n等于0,阶乘为1。
第4行:递归地计算(n-1)的阶乘,然后将n乘以计算结果。
第6行:运行factorial(5)函数并输出结果。
结果为120。
8.1 参考链接
9. 素数区间筛法
区间筛法是一种寻找素数的算法,它的基本思想是将区间内的数分解成若干个质因数的积,然后找出所有素数。以下代码演示了如何使用区间筛法查找素数。
def prime_sieve(n):
is_prime = [True] * (n + 1)
is_prime[0] = False
is_prime[1] = False
for i in range(2, int(n ** 0.5) + 1):
if is_prime[i]:
for j in range(i * i, n + 1, i):
is_prime[j] = False
return [i for i in range(n + 1) if is_prime[i]]
print(prime_sieve(100))
代码解释:
第2行:初始化一个长度为n+1的数组,所有元素都为True。
第3-4行:将0和1标记为非素数。
第5行:遍历区间中的每个数字。
第6行:如果当前数字是素数,将它的倍数标记为非素数。这里只需要遍历小于n的平方根的数,因为如果一个数大于平方根而小于n,那么它必定可以被一个小于等于平方根的数整除,因此它不是质数。
第7行:返回所有标记为True的数,即素数。
第9行:运行prime_sieve(100)函数并输出结果。
结果为[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]。
9.1 参考链接
10. 常见文件操作
文件操作是Python编程中不可或缺的一部分,以下代码演示了如何使用Python