从入门到精通:循环例题深度剖析

第1节课 循环语句结构

1.1 循环概述

(1)循环能够解决的问题

如果需要重复执行一些代码的话,就选择使用循环结构(递归)

  • 遍历一组数据:将一组数据中的每一个元素都进行访问
  • 寻找特定数据:就是在遍历的基础上,对每一个元素进行判断,直到寻找到目标
  • 批量处理数据:还是在遍历的基础上,对每一个元素都做相同的操作
  • 重复指定次数:重复跟一组数据没关系,就是重复执行直到条件满足或者不满足
  • 模拟数学规律:就是将数学当中的一些经典问题,可能需要用到循环来解决

(2)循环四要素

当我们在去分析一个循环问题时,必须先考虑以下四点:

  • 循环的开始:循环从哪里开始,起点一般我们使用变量来标记的
  • 循环的继续条件:反过来说就是结束条件,用于判断循环是否继续执行的;(循环全部执行完毕,中途结束)
  • 循环体:需要被重复执行的内容
  • 循环的控制变量:用于控制循环的进度
条件满足
条件不满足
控制变量初始化
继续条件 判断控制变量
循环体
结束
更新控制变量

向前走10步

  • 从第1步开始,计数
  • 没到10步继续
  • 向前走的1步
  • 步数计数+1

向前走直到碰墙为止

  • 距离
  • 距离 > 0
  • 向前走1步 距离递减
  • 距离的数值

1.2 for循环语句

(1)for循环基本使用

for 可以用于遍历可迭代对象的(字符串、列表、元组等),最常见的就是和 range() 函数搭配使用。

range(start, stop, step),产生一组数字,用于 for 进行遍历

  • start:起点 必须是整数
  • stop:终点 必须是整数 不取
  • step:步长 必须是整数 默认就是1
range(10) # start = 0, stop = 10, step = 1 : [0,10) 	[0,1,2,3,4,5,6,7,8,9]
range(2, 10) # start = 2, stop = 10, step = 1 :[2,10) 	[2,3,4,5,6,7,8,9]
range(1,10,2) # start = 1, stop = 10, step = 2: [1,10) 	[1,3,5,7,9] 

语法格式:

for 迭代变量 in range(a,b,c):
    循环体
for i in range(10):
    print(i, end = " ")
# 0 1 2 3 4 5 6 7 8 9 
print()
# 循环的开始:i = 0
# 循环的继续条件:i < 10
# 循环体:print(i, end = " ")
# 循环控制变量:i = i + 2
for i in range(0, 10, 2):
    print(i, end = " ")
# 0 2 4 6 8

案例:寻找最值(for基本)

"""
提示用户输入n个数字
然后在n个数字当中,找到最小值和最大值
"""
# 1.输入一个 n
n = int(input())
min_value = None
max_value = None
# 2.开启循环 执行 n 次
for i in range(n):
    # 3. 输入数字
    num = int(input())
    # 4.将第1个数字充当最小值和最大值
    if min_value == None and max_value == None:
        min_value = num
        max_value = num
    else:
        # 5.开始对比
        if num < min_value:
            min_value = num
        else:
            max_value = num
print(min_value)
print(max_value)

案例:计算平均数(for基本)

"""
输入一个 n 表示要输入元素的个数
然后输入 n 次
"""
# 1.输入 n
n = int(input())

# 2.开启循环 执行 n 次
add_sum = 0
for _ in range(n):
    # 3.输入一个数字
    num = int(input())
    add_sum += num

print(add_sum / n)

案例:判断素数(for基本)

"""
除了1和本身之外,若还有其他除数则为合数
否则为素数
15
2 3 4 5 6 7 8 9 10 11 12 13 14
  i
"""
num = int(input())
for i in range(2, num):
    if num % i == 0:
        print("不是素数")
        break
else: # 循环全部执行完毕后
    print("是素数")

案例:蒙特卡罗模拟(for基本)

"""
用统计学的思路来去估算 π

"""
import random
# 1.输入随机生成点的个数 n
n = int(input())

# 2.统计落在圆的点的个数
points = 0

# 3.随机生成n个点
for _ in range(n):
    # 随机生成-1~1之间的小数
    x = random.uniform(-1.0, 1.0)
    # 随机生成-1~1之间的小数
    y = random.uniform(-1.0, 1.0)
    distance = (x ** 2 + y ** 2) ** 0.5
    if distance <= 1:
        points += 1

pi = 4 * points / n
print(pi)

(2)循环控制语句

break 它可以在循环的执行当中来终止循环,也就意味着循环不一定非要完全执行完毕

num = int(input())
for i in range(5):
    if num == 3:
        break
    else:
        print(num)
    num = int(input())

一般break语句都会结合else语句来使用:

for ...
	if ...
    	break
else:
    # 循环没有被break中断时(正常执行完毕),执行的内容

案例:是否连续递增(for-break)

"""
意思就是说 让用户连续输入n个数字
判断这n个数字是否是连续递增的
1 2 3 4 5 OK
1 1 1 1 1 OK
1 1 2 3 3 OK
1 1 2 0 1 NO
"""
# 输入数据的个数 n
n = int(input())
# 前者变量
first = -99999999
# 连续输入n个数
for _ in range(n):
    # 输入数字
    num = int(input())
    if first == -99999999:
        first = num
    else:
        if first <= num:
            first = num
        else:
            print("不是连续递增")
            break
else:
    print("是连续递增")

案例:密码验证(for-break)

"""
比如在一个网页登录界面,需要输入用户名和密码
密码最多验证3次,超过3次则冻结账号
"""
# 假设一个密码
password = "123456"

# 定义一个剩余机会的变量
count = 3
# 循环指定3次
for _ in range(3):
    user_passwd = input()
    count -= 1
    if user_passwd != password:
        print(f"密码错误!你还剩{count}次机会!")
    else:
        print("密码正确,成功登录!")
        break
else:
    print("你的账号已被冻结!")

continue 跳过当前循环,开启下一次循环

for ...
	if ...
    	continue
    # 当执行continue时候 循环体中后面的代码 则不执行
    # 开启一下个循环

案例:100以内不能被3或5整除的数(for-continue)

# 开启循环来去遍历1~100的整数
# for num in range(1, 101):
#     if num % 3 == 0 or num % 5 == 0:
#         continue
#     print(num)

# for num in range(1, 101):
#     if not (num % 3 == 0 or num % 5 == 0):
#         print(num)

for num in range(1, 101):
    if num % 3 != 0 and num % 5 != 0:
        print(num)

案例:正数的平均值(for-continue)

"""
提示用户输入 n
提示用户输入 n个 整数 正/负
-2 2 -1 1 3
正数的个数 正数的和
"""
# 正数的个数
count = 0

# 正数的和
positive_sum = 0

# 提示用户输入一个 n
n = int(input("请输入n:"))

# 开启一个循环执行n次用于输出数据
for _ in range(n):
    num = int(input("请输入数字:"))
    if num < 0:
        # 是否必须要在这里写continue
        continue 
    else:
        count += 1
        positive_sum += num

if count == 0:
    print("0.0")
else:
    print(positive_sum / count)

pass 过,当你不太确定循环体怎么去写的时候,可以临时用pass来代替,为了避免程序报错

if-else语句当中也可以写pass 包括后面讲函数时 函数体也可以写pass

for i in range(1, 100):
    # 循环体先空着
print("别的代码") # IndentationError 非法缩进异常问题

for i in range(1, 100):
    # 循环体先空着
    pass
print("别的代码")

(3)循环嵌套

语法格式:

for ...			# O(n)
	for ...		# O(n^2)
    	for ...	# O(n^3)

我所说的时间复杂度指的是最坏情况,并不代表三层for循环的时间复杂度一定是O(n3),还得看具体的执行次数

对于初学者而言,千万别一上来就构建循环嵌套,而是先把多个一层循环写完后,再找规律,依次将一层循环进行合并同类项,构建成最终的循环嵌套。

案例:打印矩形(for嵌套)

*****
*****
*****
*****
*****
row = 5
col = 8
# for i in range(col):
#     print("*", end = "")
# print()

# for i in range(col):
#     print("*", end = "")
# print()

# for i in range(col):
#     print("*", end = "")
# print()

# for i in range(col):
#     print("*", end = "")
# print()

# for i in range(col):
#     print("*", end = "")
# print()

# 0 1 2 3 4
# i
for i in range(row):
    # 0 1 2 3 4 5 6 7
    #         j
    for j in range(col):
        print(f"{i},{j}")
        print("*", end = "")
    print()

案例:打印直角星(for嵌套)

*
**
***
****
*****
******
# # 第1行
# for i in range(1):
#     print("*", end="")
# print()

# # 第2行
# for i in range(2):
#     print("*", end="")
# print()

# # 第3行
# for i in range(3):
#     print("*", end="")
# print()

# # 第4行
# for i in range(4):
#     print("*", end="")
# print()

# # 第5行
# for i in range(5):
#     print("*", end="")
# print()

# # 第6行
# for i in range(6):
#     print("*", end="")
# print()

for n in range(1, 7):
    for i in range(n):
        print("*", end="")
    print()

案例:打印反直角星(for嵌套)

    *
   **
  ***
 ****
*****
"""
        #  *
####*   4   1
###**   3   2
##***   2   3
#****   1   4
*****   0   5
"""
# # Line 1
# for i in range(4):
#     print("#", end="")
# for i in range(1):
#     print("*", end="")
# print()

# # Line 2
# for i in range(3):
#     print("#", end="")
# for i in range(2):
#     print("*", end="")
# print()

# # Line 3
# for i in range(2):
#     print("#", end="")
# for i in range(3):
#     print("*", end="")
# print()

# # Line 4
# for i in range(1):
#     print("#", end="")
# for i in range(4):
#     print("*", end="")
# print()

# # Line 5
# for i in range(0):
#     print("#", end="")
# for i in range(5):
#     print("*", end="")
# print()

# k + n = 5
# n = 1 2 3 4 5
# k = 4 3 2 1 0
# k = 5 - n
for n in range(1, 6):
    for i in range(5 - n):
        print(" ", end="")
    for i in range(n):
        print("*", end="")
    print()

# k + n = 5
# n = 1 2 3 4 5
# k = 4 3 2 1 0
# k = 5 - n
for k in range(4, -1, -1):
    for i in range(k):
        print(" ", end="")
    for i in range(5 - k):
        print("*", end="")
    print()

案例:打印乘法口诀表(for嵌套)

"""
1 × 1 = 1
2 × 1 = 2 2 × 2 = 4
3 × 1 = 3 3 × 2 = 6 3 × 3 = 9
...
1:1
2:1 2
3:1 2 3
...
9:1 2 3 4 5 6 7 8 9
"""
# for i in range(1, 2):
#     print(f'1 × {i} = {1 * i}', end=" ")
# print()

# for i in range(1, 3):
#     print(f'2 × {i} = {2 * i}', end=" ")
# print()

# for i in range(1, 4):
#     print(f'3 × {i} = {3 * i}', end=" ")
# print()
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{i} × {j} = {i * j:2}', end=" ")
    print()

案例:找出2~100内所有素数(for嵌套)

count = 0 # 记录素数个数的
for num in range(2, 101):
    for i in range(2, num):
        if num % i == 0:
            break
    else:
        print(f'{num:2}', end=" ")
        count += 1
        # 每10个数换行
        if count % 10 == 0:
            print()

1.3 while循环语句

(1)while循环基本使用

如果循环问题能够直接看到循环次数,一般选择用for

循环问题摸不清执行次数,但至少有结束条件的话,一般选择用while 翻译 “一直执行,直到不满足条件时结束”

循环的开始
while 循环的继续条件:
    循环体
    更新循环控制变量

for i in range(1,10,2):
    print(i)
循环的开始:i = 1
循环的继续条件:i < 10
循环体:print(i)
更新循环控制变量: i = i + 2

当然了,while当中也可以结合 break、continue、pass去使用

案例:打印前50个素数(while基本)

count = 0 # 记录素数个数的
num = 2 # 从2开始找素数
while count < 50:
    # 素数判断
    for i in range(2, num // 2 + 1): # 也可以开根号
        if num % i == 0:
            break
    else:
        print(f'{num:3}', end=" ")
        count += 1 # 只有找到素数了 统计+1
        if count % 10 == 0:
            print()
    # 无论num当前是不是素数 都要向后进行遍历
    num += 1

(2)while-True结构

语法格式:

while True:
    循环内容

很容易出现死循环的问题,如何规避呢,注意 while-True当中必须出现break这个关键字

while True:
    循环的开始/更新循环的控制变量
    循环的结束条件
    if ...:
        break
    循环体
    更新循环的控制变量

案例:计算数学公式(while-True)

"""
一直询问计算机去计算一个数学公式 1+2+3
直到用户输入 quit 或者 exit 结束循环
"""
# expression = input("请输入一个公式:")
# while expression != "quit()" or expression != "exit()":
#     print(eval(expression))
#     expression = input("请输入一个公式:")

while True:
    expression = input("请输入一个公式:")
    if expression == "quit()" or expression == "exit()":
        print("结束")
        break # 千万别忘了 千万别忘了 千万别忘了
    print(eval(expression))

第2节课 【循环语句编程练习】

练习01 打印数字 I

题目描述

利用循环,寻找规律,打印如下数字模式:

模式A
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
模式B
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
模式C
          1
        2 1
      3 2 1
    4 3 2 1
  5 4 3 2 1
6 5 4 3 2 1
模式D
1 2 3 4 5 6
  1 2 3 4 5
    1 2 3 4
      1 2 3
        1 2
          1
"""
                i 行数  j
1               1       1
1 2             2       1 2
1 2 3           3       1 2 3
1 2 3 4         4       1 2 3 4
1 2 3 4 5       5       1 2 3 4 5
1 2 3 4 5 6     6       1 2 3 4 5 6
"""
for i in range(1, 7):
    for j in range(1, i + 1):
        print(j, end=' ')
    print()
"""
                i       j
1 2 3 4 5 6     1       1~6
1 2 3 4 5       2       1~5
1 2 3 4         3       1~4
1 2 3           4       1~3
1 2             5       1~2
1               6       1~1
"""
for i in range(1, 7):
    for j in range(1, 8 - i):
        print(j, end=" ")
    print()
"""             i   j       k (6 - i)
          1     1   1~1     5   
        2 1     2   2~1     4
      3 2 1     3   3~1     3
    4 3 2 1     4   4~1     2
  5 4 3 2 1     5   5~1     1
6 5 4 3 2 1     6   6~1     0
"""
for i in range(1, 7):
    for k in range(6 - i):
        print(" ", end = " ")
    for j in range(i, 0, -1):
        print(j, end=" ")
    print()
"""             i   j 7-i   k(i-1)
1 2 3 4 5 6     1   1~6     0
  1 2 3 4 5     2   1~5     1
    1 2 3 4     3   1~4     2       
      1 2 3     4   1~3     3
        1 2     5   1~2     4
          1     6   1~1     5
"""
for i in range(1, 7):
    for k in range(i - 1):
        print(" ", end=" ")
    for j in range(1, 8 - i):
        print(j, end=" ")
    print()
"""             i   j       k
1 2 3 4 5 6     6   1~6     0
  1 2 3 4 5     5   1~5     1
    1 2 3 4     4   1~4     2
      1 2 3     3   1~3     3
        1 2     2   1~2     4
          1     1   1~1     5
"""
for i in range(6, 0, -1):
    for k in range(6 - i):
        print(" ", end=" ")
    for j in range(1, i + 1):
        print(j, end=" ")
    print()

练习02 打印数字 II

题目描述

利用循环,寻找规律,打印如下数字模式:

            1
          2 1 2
        3 2 1 2 3
      4 3 2 1 2 3 4
    5 4 3 2 1 2 3 4 5
  6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
"""                             i   j           k
            1                   1   i~1, 2~i    6
          2 1 2                 2               5
        3 2 1 2 3               3               4
      4 3 2 1 2 3 4             4               3
    5 4 3 2 1 2 3 4 5           5               2
  6 5 4 3 2 1 2 3 4 5 6         6               1
7 6 5 4 3 2 1 2 3 4 5 6 7       7               0
"""
for i in range(1, 8):
    # 打印空格
    for k in range(7 - i):
        print(" ", end=" ")
    # i~1 递减
    for j in range(i, 0, -1):
        print(j, end=" ")
    # 2 ~ i 递增
    for j in range(2, i + 1):
        print(j, end=" ")
    print()
"""                             i    k      x(1 - i ~ i - 1)
            1                   1    6      0~0
          2 1 2                 2    5      -1~1
        3 2 1 2 3               3    4      -2~2
      4 3 2 1 2 3 4             4    3      -3~3
    5 4 3 2 1 2 3 4 5           5    2      -4~4
  6 5 4 3 2 1 2 3 4 5 6         6    1      -5~5
7 6 5 4 3 2 1 2 3 4 5 6 7       7    0      -6~6
"""
for i in range(1, 8):
    # 打印空格
    for k in range(7 - i):
        print(" ", end=" ")
    # 打印数字
    for x in range(1 - i, i):
        print(abs(x) + 1, end=" ")
    print()

练习03 打印菱形 I

题目描述

如下所示,是一个高度为9的菱形

    *
   * *
  * * *
 * * * *
* * * * *
 * * * *
  * * *
   * *
    *

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

  *
 * *
* * *
 * *
  *
"""
            i   j   k
    *       1   1   4
   * *      2   2   3
  * * *     3   3   2
 * * * *    4   4   1
* * * * *   5   5   0
            i   j   k
 * * * *    1   4   1
  * * *     2   3   2
   * *      3   2   3
    *       4   1   4
"""
for i in range(1, 6):
    for k in range(5 - i):
        print(" ", end = "")
    for j in range(i):
        print("*", end = " ")
    print()
for i in range(1,5):
    for k in range(i):
        print(" ", end = "")
    for j in range(5 - i):
        print("*", end = " ")
    print()
"""         i   k(|i-5|)    j
    *       1   -4          1
   * *      2   -3          1 2
  * * *     3   -2          1 2 3
 * * * *    4   -1          1 2 3 4
* * * * *   5   0           1 2 3 4 5  j <= i
 * * * *    6   1           1 2 3 4     
  * * *     7   2           1 2 3
   * *      8   3           1 2 
    *       9   4           1          j <= 10 - i
j <= i and j <= 10 - i
"""
n = 9
for i in range(1, n + 1):
    for k in range(abs(i - (n // 2 + 1))):
        print(" ", end = "")
    j = 1
    while j <= i and j <= n + 1 - i:
        print("*", end = " ")
        j += 1
    print()

练习04 打印菱形 II

题目描述

如下所示,是一个高度为9的菱形

    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

  *
 * *
*   *
 * *
  *
"""         i           j
    *       1           1
   * *      2          1 2
  *   *     3         1 2 3
 *     *    4        1 2 3 4
*       *   5       1 2 3 4 5  
 *     *    6        1 2 3 4     
  *   *     7         1 2 3
   * *      8          1 2 
    *       9           1      
j == 1 or j == i or i + j == 10    
"""

n = int(input("Enter n:"))
for i in range(1, n + 1):
    for k in range(abs(i - (n // 2 + 1))):
        print(" ", end = "")
    j = 1
    while j <= i and j <= n + 1 - i:
        if j == 1 or j == i or i + j == n + 1:
            print("*", end = " ")
        else:
            print(" ", end = " ")
        j += 1
    print()

练习05 猜数字

题目描述

计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同

对于用户输入的数字,程序会提示它是过高还是过低

输入输出描述

每次输入一个整数

每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束

示例

输入:50

输出:高了

输入:25

输出:低了

输入:42

输出:高了

输入:39

输出:猜中了!答案就是39

# 随机数字
import random
comp_num = random.randint(0,100)
while True:
    # 用户输入数字
    user_num = int(input("Enter a number:"))
    # 对比数字的大小
    if user_num < comp_num:
        print("low")
    elif user_num > comp_num:
        print("high")
    else:
        print("Yes!")
        break

练习06 最大公约数 I

题目描述

输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8

输入输出描述

输入两个数字

输出最大公约数

示例1

输入:

16 24

输出:

8

示例2

输入:

7 3

输出:

1

"""
16 24
result = 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
                                    i
"""
num1, num2 = map(int, input().split(" "))
min_value = min(num1, num2)
max_value = max(num1, num2)
# 暴力破解 枚举所有的可能性
for i in range(min_value, 0, -1):
    if min_value % i == 0 and max_value % i == 0:
        print(i)
        break
# 数学方法怎么去做?

练习07 整数的素因子

题目描述

输入一个正整数,然后找出它所有的最小因子,也称之为素因子

输入输出描述

输入一个正整数

输出多行,每行输出一个素因子

示例1

输入:

120

输出:

2 2 2 3 5

解释:

2 * 2 * 2 *3 * 5 = 120

示例2

输入:

100

输出:

2 2 5 5

"""
120 : 2 3 4 5 6 7 8 ... 120
      i
60  : 2 3 4 5 6 7 8 ... 60
      i
30  : 2 3 ... 30
      i
15  : 2 3 ... 15
        i
5   : 2 3 4 5
            i
1
2 2 2 3 5
"""
num = 7
while num != 1:
    for i in range(2, num + 1):
        if num % i == 0:
            print(i, end=" ")
            num = num // i
            break

练习08 剪刀石头布 II

题目描述

延伸【剪刀石头布 I】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜利者

import random
# 电脑赢的次数
comp_win_counts = 0
# 用户赢的次数
user_win_counts = 0
while True:
    comp_num = random.randint(0, 2)
    user_num = int(input(">>>请输入:"))
    comp_choice = ""
    if comp_num == 0:
        comp_choice = "剪刀"
    elif comp_num == 1:
        comp_choice = "石头"
    else:
        comp_choice = "布"
    user_choice = ""
    if user_num == 0:
        user_choice = "剪刀"
    elif user_num == 1:
        user_choice = "石头"
    else:
        user_choice = "布"
    print(f'>>>计算机出的 {comp_choice}')
    print(f'>>>用户出的 {user_choice}')
    div = user_num - comp_num
    if comp_num == user_num:
        print(">>>此轮为平局")
    elif div == -2 or div == 1:
        print(">>>此轮用户赢")
        user_win_counts += 1
    else:
        print(">>>此轮电脑赢")
        comp_win_counts += 1
    if user_win_counts == 3:
        print(">>>最终,用户赢!")
        break
    if comp_win_counts == 3:
        print(">>>最终,电脑赢!")
        break

练习09 水仙花数

题目描述

水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33

编写程序,输出所有的水仙花数

"""
100 -> 999
"""
for num in range(100, 1000):
    # 个位
    a = num % 10
    # 十位
    b = num // 10 % 10
    # 百位
    c = num // 100
    if a ** 3 + b ** 3 + c ** 3 == num:
        print(num)

练习10 青蛙跳台阶

题目描述

一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法?

例如:两个台阶,有两种跳法(1+1,2);四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,1+1+2,2+2)

"""
1 2 3 5 8 13 21 34 55 ...
斐波那契数列
f(x) = f(x - 1) + f(x - 2)
f(1) = 1
f(2) = 2

n = 6

1 2 3 5 8 13
  a b c
    a b
"""
n = int(input())
if n == 1 or n == 2:
    print(n)
else:
    a = 1
    b = 2
    c = 0
    for _ in range(n - 2):
        c = a + b
        a = b
        b = c
    print(c)

你可能感兴趣的:(算法,开发语言,python)