鱼C论坛

 找回密码
 立即注册
查看: 3575|回复: 9

[已解决]关于乘法表中while嵌套循运行顺序的不解

[复制链接]
发表于 2020-12-13 12:13:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码例子罗列如下:
i = 1
while i <= 9:                                     ##################①
    j = 9                                             ##################②
    while j >= i:                                  ##################③
        print(j, "*", i, "=", j * i, end=' ') ##################④
        j -= 1                                      ##################⑤
    print()                                        ##################⑥
    i += 1                                       ##################⑦

运行处的结果为:

9 * 1 = 9 8 * 1 = 8 7 * 1 = 7 6 * 1 = 6 5 * 1 = 5 4 * 1 = 4 3 * 1 = 3 2 * 1 = 2 1 * 1 = 1
9 * 2 = 18 8 * 2 = 16 7 * 2 = 14 6 * 2 = 12 5 * 2 = 10 4 * 2 = 8 3 * 2 = 6 2 * 2 = 4
9 * 3 = 27 8 * 3 = 24 7 * 3 = 21 6 * 3 = 18 5 * 3 = 15 4 * 3 = 12 3 * 3 = 9
9 * 4 = 36 8 * 4 = 32 7 * 4 = 28 6 * 4 = 24 5 * 4 = 20 4 * 4 = 16
9 * 5 = 45 8 * 5 = 40 7 * 5 = 35 6 * 5 = 30 5 * 5 = 25
9 * 6 = 54 8 * 6 = 48 7 * 6 = 42 6 * 6 = 36
9 * 7 = 63 8 * 7 = 56 7 * 7 = 49
9 * 8 = 72 8 * 8 = 64
9 * 9 = 81


不懂的问题罗列如下:
1、对于这种存在嵌套循环的语句应当如何分析它的运行顺序?以上面的乘法表例子的代码来举例分析。
       
        第一种假设:对于嵌套循环语句的运行程序的顺序是:从最内部的循环语句开始分析并且一直运行到内部循环的语句不能再进行循环为止,然后才开始分析外一层的循环语句吗?比如上述例子中,先从①到②到③到④到⑤再到③,直到③循环完毕,再从⑤到⑥到⑦到①。因为③是最后一个循环语句部分,所以是不是当 j = 9 1 = i ,又因为 j > i,所以打印④ j * i ,然后⑤ j = j -1 j= 8.  请重点注意这里,此时⑥ i = i +1 这个语句并没有运行下去,而是 当 j = 8 时,它又回到了 ③while j >= 1 的这个循环语句中,直到当 while j >= i 为 Flase 时,然后程序才开始去 运行 print( ) 和 i = i +1.然后又回到最初的循环语句 while i <= 9 这个循环部分中。

        结论,所以我推测,对于嵌套循环语句的运行顺序,应该是先从最内部的循环语句开始。(不知道我的分析是否正确?)

        第二种假设:对于嵌套循环语句的运行程序的顺序是:所有的循环语句直接依次往下运行,比如从①到②到③到④到⑤到⑥到⑦再到①。但是这样会有一个问题,如果 j = 9 1 = i ,又因为 j > i,所以打印④ j * i ,然后⑤ j = j -1 j= 8.请重点注意这里,如果运行到⑤时,但并不返回③中,而是继续执行到⑥到⑦,i = i +1 ,此时 i = 2, 再到①到②到③中,因 ①中,i < 9,所以 j = 9。又因为 前述中 j = 8,此时 ⑤这部程序失去了意义。 到④时,j = 9 i =2  ,j * i = 18.运行到此时可以发现与答案给出的顺序相对比来看。(答案的顺序为: 9 * 1 = 9 8 * 1 = 8.  而依据第二种假设的顺序得出的答案为: 9 * 1 = 9 9 * 2 = 18. )

        结论:所以我推测,第二种假设得出的顺序似乎不合乎逻辑。即便合乎逻辑,也不属于答案给出的计算要求。(我也不知道我的分析是否存在逻辑错误或者语法错误,望老师指正。)


2、对于第⑥步骤中的  print  ( ) ,我不明白这个单独的 print ( ),在程序的运行中到底是起着什么样的作用?

3,麻烦哪位老师耐心的给我讲下关于嵌套循环语句中,关于每一个循环模块中的具体分析顺序,谢谢!!!
最佳答案
2020-12-13 13:29:27
本帖最后由 小伤口 于 2020-12-13 13:30 编辑
i = 1
while i <= 9:                                     #第一个while判断i是否小于等于9
    j = 9                                          
    while j >= i:                               #如果第一个while成立进入第二个while
        print(j, "*", i, "=", j * i, end=' ') #打印j*i
        j -= 1                                      
    print()                                        
    i += 1                                       
#实现原理是进入第一个while循环后进入第二个while循环只有在第二while循环为false之后才会跳出来
#继续循环第一个while循环,第一个while循环为false时。程序结束。
#实现步骤就是第一个while循环使j=9 i=1 进入第二个while循环即9*1,之后j-=1继续
#while循环即9*1 8*1 7*1等等,直到j=0第二个while循环结束又进入第一个while循环i=2
#j重新赋值为9继续进入第二个while循环继续像刚才一样如此重复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 12:24:28 | 显示全部楼层
Python 只会从上往下执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-13 12:29:56 | 显示全部楼层
我只能说清楚print()是用来换行的,其他的说不清
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-13 13:29:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小伤口 于 2020-12-13 13:30 编辑
i = 1
while i <= 9:                                     #第一个while判断i是否小于等于9
    j = 9                                          
    while j >= i:                               #如果第一个while成立进入第二个while
        print(j, "*", i, "=", j * i, end=' ') #打印j*i
        j -= 1                                      
    print()                                        
    i += 1                                       
#实现原理是进入第一个while循环后进入第二个while循环只有在第二while循环为false之后才会跳出来
#继续循环第一个while循环,第一个while循环为false时。程序结束。
#实现步骤就是第一个while循环使j=9 i=1 进入第二个while循环即9*1,之后j-=1继续
#while循环即9*1 8*1 7*1等等,直到j=0第二个while循环结束又进入第一个while循环i=2
#j重新赋值为9继续进入第二个while循环继续像刚才一样如此重复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-13 13:48:10 | 显示全部楼层

1、是不是所有的嵌套循环语句都是这种逻辑来分析的?
2、单纯的一个 print( ) 表示什么意思?比如在本例子中的这种。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-13 13:51:31 | 显示全部楼层
本帖最后由 小伤口 于 2020-12-13 14:01 编辑
Fring 发表于 2020-12-13 13:48
1、是不是所有的嵌套循环语句都是这种逻辑来分析的?
2、单纯的一个 print( ) 表示什么意思?比如在本例 ...


1 反正只要记住无论有多少个while 只有这个while循环为false时才会跳出这个while的框架否则就一直循环
2 如上面所说就是换行我也经常这样搞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-13 13:52:35 | 显示全部楼层
Fring 发表于 2020-12-13 13:48
1、是不是所有的嵌套循环语句都是这种逻辑来分析的?
2、单纯的一个 print( ) 表示什么意思?比如在本例 ...

你可以把print()去掉有什么变化就知道它有啥作用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-13 13:58:04 | 显示全部楼层
Fring 发表于 2020-12-13 13:48
1、是不是所有的嵌套循环语句都是这种逻辑来分析的?
2、单纯的一个 print( ) 表示什么意思?比如在本例 ...

有帮助的话给个最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-13 14:21:17 | 显示全部楼层
好的,可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-13 20:02:35 | 显示全部楼层
Fring 发表于 2020-12-13 13:48
1、是不是所有的嵌套循环语句都是这种逻辑来分析的?
2、单纯的一个 print( ) 表示什么意思?比如在本例 ...

print语句中(j ,"*",i,"=",j*i,end=" ")  
例如  9 * 4 =36
9表示j   "*"=乘号 4表示i   36表示 j*i  end=“”表示空格

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 03:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表