题目:输出 9*9 乘法口诀表。
程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
总结:for循环嵌套的内层和外层执行逻辑的理解
明白了!!!第一层for循环取一个元素出来,然后进入第二层循环,第二层循环 把所有的元素遍历一遍之后才跳出此层循环。
再进入外层循环,由此类推执行完毕所有的循环
所以,外层循环高于内层循环,内层循环执行完毕之后跳出内层循环才继续外层循环,然后又进入内层循环
举个例子:
外层循环要执行9个数,内层循环也有9个数,当外层循环每执行1个数时进入内层循环,内层执行9个。外层一共执行9遍,那么内层就要执行9x9=81遍。
方法1:end=""打印之后不换行
for i in range(1, 10):
for j in range(1, 10):
print ("%d*%d=%d" % (i,j, i*j),"\t",end="")
if i == j:
print()
break
测试:
>>> python .\test.py
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
方法2:
for i in range(1,10):
l=[]
for j in range(1,i+1):
l.append(str(j)+"*"+str(i)+"="+str(i*j))
print(" ".join(l))
方法3:
for i in range(1, 10):
for j in range(1, i+1):
print('%dx%d=%d' %(i,j,i*j),' ',end="")
if i==j:
print()
break
输出结果:
>>> python .\test.py
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
方法4:print()函数放在内层循环之外执行,这样循环的逻辑就是:每结束一轮内层循环就换行。
如果把print()函数放在内层循环里面,逻辑就是:
#形式1:
for i in range(1, 10):
print()
for j in range(1, i+1):
print('%dx%d=%d' %(i,j,i*j),' ',end="")
#结果:
>>> python .\test.py
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
#形式2
for i in range(1, 10):
for j in range(1, i+1):
print('%dx%d=%d' %(i,j,i*j),' ',end="")
print()
#结果:
>>> python .\test.py
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
可以看出来,两种形式的区别在于,由于形式一先执行了print()函数,所以形式一的输出结果在第一行多了一行空行。
方法5:一行搞定
[[print(f"{i} x {j} = {i * j}", end=' ') if (i + 1) > j else print('\n') for j in range(1, i + 2)] for i in range(1, 10)]