Python乘法表代码疑问:为何第一种写法无法生成完整九九乘法表?
全局定义
num_second导致乘法表不完整的原因 先看两段核心代码:
第一段(仅输出1×1到1×9)
num_second = 1 # 全局作用域定义 for num_first in range(1, 10): while num_second <= 9: print(f"{num_first}×{num_second}={num_first * num_second}", end="\t") num_second += 1 print()
第二段(正常生成完整乘法表)
for num_first in range(1, 10): num_second = 1 # 外层循环的局部作用域定义 while num_second <= num_first: print(f"{num_first}×{num_second}={num_first * num_second}", end="\t") num_second += 1 print()
问题本质
全局变量num_second的值在程序运行期间是持久化的,不会自动重置:
- 第一次执行外层循环(
num_first=1)时,内层循环从num_second=1开始,一直递增到10(当num_second=9时执行最后一次打印,随后num_second +=1变为10,不满足<=9的条件,内层循环退出)。 - 进入第二次到第九次外层循环时,
num_second已经是10,内层循环的条件num_second <=9永远不成立,因此不会执行任何打印操作,只会输出换行。 - 最终就只会看到第一次循环生成的1×1到1×9的内容。
而把num_second=1放到外层循环内部后,每次外层循环迭代(也就是每一行的开头),都会把num_second重新重置为1,这样内层循环就能从1开始,对应每个num_first生成完整的行内容。
内容的提问来源于stack exchange,提问作者gkr gb
相关产品推荐
相关产品推荐

