鱼C论坛

 找回密码
 立即注册
查看: 1680|回复: 8

课后习题杨氏三角形的一个小问题

[复制链接]
发表于 2023-7-11 11:17:26 | 显示全部楼层 |阅读模式

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

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

x
下列代码是习题的参考答案,用该代码进行打印后,在最后两行之间会存在一行空白行,这是什么原因?又该如何解决?



# 初始化杨辉三角形
# 创建一个10*10的二维列表,并将所有的元素初始化为0
triangle = []
for i in range(10):
    triangle.append([])
    for j in range(10):
        triangle[i].append(0)
# 计算杨辉三角形
# 根据观察,我们知道杨辉三角形左右两边的元素均为1
for i in range(10):
    triangle[i][0] = 1
    triangle[i][i] = 1
   
# 第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
for i in range(2, 10):
    for j in range(1, i):
        triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]
   
# 输出杨辉三角形
for i in range(10):
    # 因为是三角形,所以i越小,前边需要填充的TAB越多
    for k in range((10-i)//2):
        print('\t', end='')
    for j in range(i+1):
        # 要形成“隔行错开”的效果,所以我们在偶数行加4个空格
        if i % 2 == 1:
            print("    ", end='')
        # 为何要使用TAB而非空格,大家可以将下面的end='\t'改成对应的空格数即可知晓
        print(triangle[i][j], end='\t')
    print()


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

使用道具 举报

发表于 2023-7-11 11:17:37 | 显示全部楼层

回帖奖励 +10 鱼币

在最后两行之间存在一行空白行的原因是代码中的print()语句。在最外层的循环中,当i等于0、1时,内层的for j in range(i+1)循环不会执行,因此print()语句会执行两次,输出两行空白行。

为了解决这个问题,可以添加一个判断条件,只有在内层循环执行时才执行print()语句,即当i大于等于2时。修改代码如下:
# 输出杨辉三角形for i in range(10):    # 因为是三角形,所以i越小,前边需要填充的TAB越多    for k in range((10-i)//2):        print('\t', end='')        if i >= 2:        for j in range(i+1):            # 要形成“隔行错开”的效果,所以我们在偶数行加4个空格            if i % 2 == 1:                print("     ", end='')            # 为何要使用TAB而非空格,大家可以将下面的end='\t'改成对应的空格数即可知晓            print(triangle[i][j], end='\t')        print()
通过添加判断条件,可以确保只在内层循环执行时输出杨辉三角形的数字,从而避免了最后两行之间的空白行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-11 11:17:54 | 显示全部楼层

回帖奖励 +10 鱼币

陶远航 发表于 2023-7-11 11:17
在最后两行之间存在一行空白行的原因是代码中的print()语句。在最外层的循环中,当i等于0、1时,内层的for  ...

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

使用道具 举报

发表于 2023-7-11 11:18:06 | 显示全部楼层

回帖奖励 +10 鱼币

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

使用道具 举报

发表于 2023-7-11 11:19:12 | 显示全部楼层

回帖奖励 +10 鱼币

造成空白行的原因是在偶数行(i % 2 == 0)输出每个元素后没有添加制表符(\t),导致下一行的元素紧邻当前行的元素而没有缩进。

要解决这个问题,可以在偶数行的内循环中添加对应数量的制表符,使得每个元素与奇数行的元素对齐。修改代码如下:
for i in range(10):
    for k in range((10-i)//2):
        print('\t', end='')
    for j in range(i+1):
        # 偶数行添加制表符和额外空格
        if i % 2 == 0:
            print('\t', end='')
        print(triangle[i][j], end='\t')
    print()

通过在偶数行的内循环中添加一个制表符和额外的空格,即可保证输出结果的对齐。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-11 12:13:17 | 显示全部楼层

回帖奖励 +10 鱼币

鱼币谢谢

评分

参与人数 1贡献 -1 收起 理由
sfqxx -1 请不要无意义灌水!

查看全部评分

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

使用道具 举报

发表于 2023-7-11 19:10:10 | 显示全部楼层
.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-30 22:07:46 | 显示全部楼层
末尾循环不是还有个print()m吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-31 06:42:50 | 显示全部楼层
本帖最后由 smallwh 于 2023-7-31 07:06 编辑

我试了一下,原因是IDLE的宽度太小了,打印不开一整行,先横向拉宽一些再运行就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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