鱼C论坛

 找回密码
 立即注册
查看: 3134|回复: 7

[已解决]关于for循环九九乘法表

[复制链接]
发表于 2022-9-22 20:57:47 | 显示全部楼层 |阅读模式

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

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

x
>>> for i in range(1, 10):
...     for j in range(1, i+1):
...         print(i, "x", j, "=", i * j, end=' ')
...     print("\n")


这个代码的最后一行有些不太理解:
目前已经理解在 print(i, "x", j, "=", i * j, end=' ')里,end=''是为了不换行,也尝试了如果去掉最后一行,会是一长串的乘法表,不会形成三角形

for i in range(1, 10):
    for j in range(1, i+1):
        print(i, "x", j, "=", i * j, end=' ')

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

那为什么加了最后一行就能实现?
最佳答案
2022-9-22 21:02:14
你这代码应该是这样的吧
for i in range(1, 10): # 这个for打印行
    for j in range(1, i+1): # 这个for打印列
        print(i, "x", j, "=", i * j, end=' ')
    print('\n') #第2个for结束,说明一行的所有列打印完,也就是说一行结束,行结束打印换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-22 21:01:52 | 显示全部楼层
因为内层的循环
for i in range(1, i+1):
    print(i, "x", j, "=", i*j, end='')
是为了把nx1到nxn的所有乘法算式打印出来,同时end参数把结尾变成了空格所以不会换行。换言之,nx1到nxn是在一行显示的,当这个循环结束后我们需要另起一行,此时就需要在外层的循环中使用print()换行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-22 21:02:14 | 显示全部楼层    本楼为最佳答案   
你这代码应该是这样的吧
for i in range(1, 10): # 这个for打印行
    for j in range(1, i+1): # 这个for打印列
        print(i, "x", j, "=", i * j, end=' ')
    print('\n') #第2个for结束,说明一行的所有列打印完,也就是说一行结束,行结束打印换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-22 21:08:20 | 显示全部楼层
ba21 发表于 2022-9-22 21:02
你这代码应该是这样的吧

明白了,谢谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-22 21:10:40 | 显示全部楼层
如果你觉得还不是很清楚,有个简单的办法,每次打印完就休眠一段时间,让你看清楚打印的过程。
import time
for i in range(1, 10):
    for j in range(1, i+1):
        print(f'{i} * {j} = {i*j}', end='\t')
        time.sleep(0.5)  # 每打印完一个算式就休眠0.5秒
    print()
    time.sleep(0.5)  # 换行后再次休眠0.5秒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-9-24 21:54:08 | 显示全部楼层
Brick_Porter 发表于 2022-9-22 21:10
如果你觉得还不是很清楚,有个简单的办法,每次打印完就休眠一段时间,让你看清楚打印的过程。

学会了!谢谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 11:03:53 | 显示全部楼层
Brick_Porter 发表于 2022-9-22 21:10
如果你觉得还不是很清楚,有个简单的办法,每次打印完就休眠一段时间,让你看清楚打印的过程。

大佬,如何在打印结果时交换 i和j的位置啊,我试了下 print(i, "x", j, "=", j*i, end=' ') 这样,在这变成
j* i 打印结果并他们的位置并没有交换过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-3 21:53:53 | 显示全部楼层
leizhenzi23 发表于 2024-4-9 11:03
大佬,如何在打印结果时交换 i和j的位置啊,我试了下 print(i, "x", j, "=", j*i, end=' ') 这样,在这变 ...

你写的是这样的:
print(i, "x", j, "=", j*i, end=' ')
如果要调换位置,应该这样写:
print((j, "x", i, "=", j*i, end=" ")

我建议你学一学有关字符串格式化的内容,这样写起来会更简单一些:
print(f"{j} x {i} = {j*i}")  # 字符串前面加上f就是一个带有格式的字符串,{}用来占位置,里面填上你期望填入是东西,比如变量i和j,当然填入表达式也可以,比如j*i,实际结果和上面是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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