20230109 发表于 2023-2-2 01:13:09

python制作倒序的乘法表

>>> i = 1
>>> while i <= 9:
>>>   j = 9
>>>   while j >= i:
>>>         print(j, "*", i, "=", j * i, end=' ')
>>>         j -= 1
>>>   print()
>>>   i += 1




问一下大家,这个倒数第二行代码的print()有什么用呢?


为什么不能是这样子?(为什么会有重复的呢?)
i = 1
while i <= 9:
    j = 9
    while i <= j:
      print(j, "*", i, "=", j * i, end=' ')
      j -= 1
    print(j,"*",i,"=",j*i,sep="" )
    i += 1

hziyan 发表于 2023-2-2 01:13:10

print()的作用是换行。
相当于传入了一个空的字符串print("",end="\n"),那个end参数默认为换行符"\n",
所以每次在打印一个空字符串(什么都不打印)的同时附带一个换行符,把它换行了
所以有换行的作用。

至于为什么不能用你的这段代码,
首先看一下有两处不同的地方,
①i <= j。。没什么好说的,其实就是原代码j >= i,这俩一样的

②print(j,"*",i,"=",j*i,sep="" )
这个的话,首先其实仍然起到了换行的作用,
end仍然是换行符"\n"没有被修改,所以每次执行都会换行
但是运行之后却会发现会多出来一坨东西!
看运行结果:
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 0*1=0
9 * 2 = 18 8 * 2 = 16 7 * 2 = 14 6 * 2 = 12 5 * 2 = 10 4 * 2 = 8 3 * 2 = 6 2 * 2 = 4 1*2=2
9 * 3 = 27 8 * 3 = 24 7 * 3 = 21 6 * 3 = 18 5 * 3 = 15 4 * 3 = 12 3 * 3 = 9 2*3=6
9 * 4 = 36 8 * 4 = 32 7 * 4 = 28 6 * 4 = 24 5 * 4 = 20 4 * 4 = 16 3*4=12
9 * 5 = 45 8 * 5 = 40 7 * 5 = 35 6 * 5 = 30 5 * 5 = 25 4*5=20
9 * 6 = 54 8 * 6 = 48 7 * 6 = 42 6 * 6 = 36 5*6=30
9 * 7 = 63 8 * 7 = 56 7 * 7 = 49 6*7=42
9 * 8 = 72 8 * 8 = 64 7*8=56
9 * 9 = 81 8*9=72

可见每行最后明显多出来了一个与其他正常结果不同的东西
其中有空格的“9 * 8 = 72”“8 * 8 = 64”应该是print(j, "*", i, "=", j * i, end=' ')打印的,
没有空格的   “7*8=56”就是print(j,"*",i,"=",j*i,sep="" )打印的了。

那么为什么呢?
原本两个都有end="\n",已经起到应有的作用了,
但是改后的代码要多打印什么什么j*i,其实是多余的,
删掉就完美运行了

另外对于print的参数end不理解的话可以参考甲鱼的讲解戳这里
如果问题已经得到解答,请设置最佳答案~~

青出于蓝 发表于 2023-2-2 07:49:40

倒数第二行print起到换行的作用

sfqxx 发表于 2023-2-2 11:04:52

第一个问题:print是起到换行作用
不过我很好奇为什么不是等于号,不然您这个程序好像会一片空白。
如果把 <= 改成 =
运行程序后,i=1,打印1*9,1*8,1*7……1*1
i=j了,换行
i+1,j-1,打印2*8,2*7,2*6……2*2
以此类推
如果答案对您有帮助,请设置最佳答案
页: [1]
查看完整版本: python制作倒序的乘法表