Python for Kids
  • 0 前言
  • 1 编程环境准备
  • 2 运算符和表达式
  • 3 掌握变量
  • 4 字符串
  • 5 获取用户的输入
  • 6 条件判断
  • 7 条件判断实操
  • 8 FOR循环
  • 9 循环和列表
  • 10 WHILE循环
  • 11 WHILE循环实操
  • 12 WHILE循环再实操
  • 13 多重循环
  • 14 再谈列表
  • 15 初见函数
  • 16 函数实操
  • 17 选择排序
  • 18 冒泡排序
  • 19 递归算法之一
  • 20 递归算法实操
  • 21 快速排序
  • 22 汉诺塔游戏
  • 23 递推算法
  • 24 分治算法
  • 25 集合与组合
  • 26 贪心算法
  • 27 字典和键值对
  • 28 广度优先搜索算法
  • 29 数组和向量化计算
  • 30 随机和模拟
  • 31 数据可视化
  • 32 文件读取和分析
Powered by GitBook
On this page
  • 大纲
  • 练习:两两相加
  • 练习:九九乘法表
  • 练习:无穷序列的计算
  • 练习:鸡兔同笼
  • 练习:百钱买百鸡
  • 练习:质因数分解

Was this helpful?

13 多重循环

其实还是在循环里面

大纲

  • 练习:两两相加

  • 练习:九九乘法表

  • 练习:序列计算

  • 练习:鸡兔同笼

  • 练习:百钱买百鸡

  • 练习:质因数分解

前面的课程里我们学习了FOR循环和WHILE循环,我们会再用一次课程来加强练习,并着重练习循环的嵌套。

练习:两两相加

计算两组数字,两两相加之后的结果

a = [1,3,5]
b = [2,4,6]
for i in a:
    for j in b:
        print(str(i)+"+"+str(j)+"="+str(i+j))
1+2=3
1+4=5
1+6=7
3+2=5
3+4=7
3+6=9
5+2=7
5+4=9
5+6=11

练习:九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print(str(i)+"*"+str(j)+"="+str(i*j),end=" ")
    print("")
1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=12 4*4=16 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 

注意有一点技巧,print的一个参数是end,默认是换行,用空格可以控制它们在同一行内输出。

练习:无穷序列的计算

有一个无穷的序列, 1/1, 1/2, 2/2, 1/3, 2/3, 3/3, 1/4, 2/4, 3/4, 4/4... 问数字12/83排在第几位?

ans = 0
for i in range(1,84):
    for j in range(1,i+1):
        ans = ans+1
        if (i==83) and (j==12):
            break
print(ans)
3415

练习:鸡兔同笼

把一些鸡和兔放在一个笼子里,一共有35个头,一共有94只脚,求鸡和兔各有几只?

x = 35
y = 94
for i in range(1,x+1):
    for j in range(1,x+1):
        if (i+j==35) and (i*2+j*4==94):
            break
print("鸡有{i}只".format(i=i))
print("兔有{j}只".format(j=j))
鸡有35只
兔有35只

break只会跳出单层循环,所以答案不正确。

x = 35
y = 94
for i in range(1,x+1):
    for j in range(1,x+1):
        if (i+j==35) and (i*2+j*4==94):
            print("鸡有{i}只".format(i=i))
            print("兔有{j}只".format(j=j))
鸡有23只
兔有12只

练习:百钱买百鸡

3文钱可以买一只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡,你有100文钱,如何做才能正好买到100只鸡

for x in range(100):
    for y in range(100):
        for z in range(100):
            if (x+y+z==100) and (3*x+2*y+z/3==100):
                print(x,y,z)
0 40 60
5 32 63
10 24 66
15 16 69
20 8 72
25 0 75

如果必须每种都有一只以上,可以把range的起始值设置为1.

for x in range(1,100):
    for y in range(1,100):
        for z in range(1,100):
            if (x+y+z==100) and (3*x+2*y+z/3==100):
                print(x,y,z)
5 32 63
10 24 66
15 16 69
20 8 72

这个三重循环运行了多少次?如何才能减少计算资源的消耗?

100*100*100
1000000
for x in range(1,33):
    for y in range(1,50):
        for z in range(1,100):
            if (x+y+z==100) and (3*x+2*y+z/3==100):
                print(x,y,z)
5 32 63
10 24 66
15 16 69
20 8 72
for x in range(1,33):
    for y in range(1,50):
        z = 100-x-y
        if (x+y+z==100) and (3*x+2*y+z/3==100):
            print(x,y,z)
5 32 63
10 24 66
15 16 69
20 8 72
33*50
1650

练习:质因数分解

将一个整数分解为若干个质因数的乘积。

x = int(input("请输入一个整数:"))
for i in range(2,x):
    while x%i==0:
        print(i,end="")
        x = x/i
        if x!=1:
            print("*",end="")
    if x==1:
        break
请输入一个整数:63
3*3*7
Previous12 WHILE循环再实操Next14 再谈列表

Last updated 4 years ago

Was this helpful?