鱼C论坛

 找回密码
 立即注册
查看: 1259|回复: 11

[已解决]输出杨辉三角的代码,可以输入阶数,但是输出杨辉三角的地方有点问题,求助

[复制链接]
发表于 2023-8-2 10:50:17 | 显示全部楼层 |阅读模式

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

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

x
  1. """打印一个任意阶数的杨辉三角"""

  2. s = int(input("请输入杨辉三角的阶数:"))
  3. print(s, "阶杨辉三角如下:")

  4. #创建一个s*s的二维列表,并将所有的元素初始化为0
  5. triangle = []
  6. for i in range(s):
  7.     triangle.append([])
  8.     for j in range(s):
  9.         triangle[i].append(0)

  10. #计算杨辉三角
  11. #根据观察可以发现,杨辉三角左右两边的元素均为1
  12. for i in range(s):
  13.     triangle[i][0] = 1
  14.     triangle[i][i] = 1

  15. #第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
  16. for i in range(2, s):
  17.     for j in range(1, i):
  18.         triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

  19. #输出杨辉三角
  20. for i in range(s):
  21.     for k in range((s-i)//2):
  22.         print('\t', end='')
  23.     for j in range(i+1):
  24.         if i % 2 == 1:
  25.             print("    ", end='')
  26.         print(triangle[i][j], end='\t')
  27.     print()
复制代码
最佳答案
2023-8-2 11:11:31
本帖最后由 tommyyu 于 2023-8-2 11:12 编辑
  1. """打印一个任意阶数的杨辉三角"""

  2. s = int(input("请输入杨辉三角的阶数:"))
  3. print(s, "阶杨辉三角如下:")

  4. #创建一个s*s的二维列表,并将所有的元素初始化为0
  5. triangle = []
  6. for i in range(s):
  7.     triangle.append([])
  8.     for j in range(s):
  9.         triangle[i].append(0)

  10. #计算杨辉三角
  11. #根据观察可以发现,杨辉三角左右两边的元素均为1
  12. for i in range(s):
  13.     triangle[i][0] = 1
  14.     triangle[i][i] = 1

  15. #第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
  16. for i in range(2, s):
  17.     for j in range(1, i):
  18.         triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

  19. #输出杨辉三角
  20. for i in range(s):
  21.     for k in range((s-i)//2):
  22.         print('\t', end='')
  23.     for j in range(i+1):
  24.         if s % 2 + i % 2 == 1:
  25.             print("    ", end='')
  26.         print(triangle[i][j], end='\t')
  27.     print()
复制代码
只需要改动 29 行的判断条件即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-2 10:50:31 | 显示全部楼层
这段代码输出杨辉三角的部分有点问题,主要表现在以下几个方面:

1. 输出格式问题:
   · 当阶数为偶数时,杨辉三角的每行元素之间只需要一个制表符 \t ,但是当前代码在奇数行的每个元素后都多了两个空格,导致输出格式不规整。
   · 另外,输出之前,还在每行前输出了一些空格,这样会使得整个杨辉三角产生偏移。

2. 阶数为偶数时多输出了一行:
   · 当阶数为偶数时,由于输出奇数行时每个元素后多了两个空格,导致最后一行的输出超出了预期。

为了解决上述问题,我们需要做一些修改,下面是修改后的代码:

  1. s = int(input("请输入杨辉三角的阶数:"))
  2. print(s, "阶杨辉三角如下:")

  3. # 创建一个s*s的二维列表,并将所有的元素初始化为0
  4. triangle = []
  5. for i in range(s):
  6.     triangle.append([])
  7.     for j in range(s):
  8.         triangle[ i].append(0)

  9. # 计算杨辉三角
  10. # 根据观察可以发现,杨辉三角左右两边的元素均为1
  11. for i in range(s):
  12.     triangle[ i][0] = 1
  13.     triangle[ i][ i] = 1

  14. # 第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
  15. for i in range(2, s):
  16.     for j in range(1, i):
  17.         triangle[ i][j] = triangle[i-1][j-1] + triangle[i-1][j]

  18. # 输出杨辉三角
  19. for i in range(s):
  20.     for k in range(s - i - 1):
  21.         print('\t', end='')
  22.     for j in range(i + 1):
  23.         print(triangle[ i][j], end='\t')
  24.     print()
复制代码


这样修改后,杨辉三角的输出应该能够正确地按照阶数进行打印,并且格式整齐规整,不会多输出一行,也不会产生偏移。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 10:50:35 | 显示全部楼层
打印任意阶数的杨辉三角
  1. s = int(input("请输入杨辉三角的阶数:"))
  2. print(s, "阶杨辉三角如下:")
  3. # 创建一个s*s的二维列表,并将所有的元素初始化为0
  4. triangle = []
  5. for i in range(s):
  6.     triangle.append([])
  7.     for j in range(s):
  8.         triangle[i].append(0)
  9. # 计算杨辉三角
  10. # 根据观察可以发现,杨辉三角左右两边的元素均为1
  11. for i in range(s):
  12.     triangle[i][0] = 1
  13.     triangle[i][i] = 1
  14. # 第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
  15. for i in range(2, s):
  16.     for j in range(1, i):
  17.         triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]
  18. # 输出杨辉三角
  19. for i in range(s):
  20.     for k in range((s-i)//2):
  21.         print('\t', end='')
  22.     for j in range(i+1):
  23.         if i % 2 == 1:
  24.             print("   ", end='')
  25.         print(triangle[i][j], end='\t')
  26.     print()
复制代码

这段代码可以打印出任意阶数的杨辉三角。它首先通过输入获得杨辉三角的阶数 s,然后创建一个 s×s 的二维列表 triangle,并将所有元素初始化为 0。接下来,根据杨辉三角的规律,将左右两边的元素赋值为 1。然后使用循环计算剩余部分的数值,每个数值等于其上方两个数值之和。最后,通过嵌套循环按照规定格式输出杨辉三角。

希望这段代码能满足你的需求!如果有任何问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-8-2 10:58:26 | 显示全部楼层
isdkz 发表于 2023-8-2 10:50
这段代码输出杨辉三角的部分有点问题,主要表现在以下几个方面:

1. 输出格式问题:

我想要的是三角形的杨辉三角,而不是直角型的
另外,我发现阶数为偶数时的杨辉三角格式没有问题
但是阶数为奇数时会发生问题,还请帮我补充一下输出杨辉三角时奇数的情形
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 10:59:49 | 显示全部楼层
Mike_python小 发表于 2023-8-2 10:50
打印任意阶数的杨辉三角

您这个完全就是把我写的代码抄一遍,一点都没有改啊,严重怀疑是chatgpt作答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 11:08:37 | 显示全部楼层
小儿无赖 发表于 2023-8-2 10:58
我想要的是三角形的杨辉三角,而不是直角型的
另外,我发现阶数为偶数时的杨辉三角格式没有问题
但是阶 ...

我明白你的意思了,你希望输出的杨辉三角是一个等腰三角形的形状,而不是直角三角形。对于奇数阶的杨辉三角,由于中间的元素只有一个,所以在输出时需要特殊处理,以保证格式的整齐。下面是修改后的代码,我在输出部分增加了对奇数阶的处理:

  1. s = int(input("请输入杨辉三角的阶数:"))
  2. print(s, "阶杨辉三角如下:")


  3. # 创建一个s*s的二维列表,并将所有的元素初始化为0
  4. triangle = []
  5. for i in range(s):
  6.     triangle.append([])
  7.     for j in range(s):
  8.         triangle[i].append(0)


  9. # 计算杨辉三角
  10. # 根据观察可以发现,杨辉三角左右两边的元素均为1
  11. for i in range(s):
  12.     triangle[i][0] = 1
  13.     triangle[i][i] = 1


  14. # 第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
  15. for i in range(2, s):
  16.     for j in range(1, i):
  17.         triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]


  18. # 输出杨辉三角
  19. for i in range(s):
  20.     # 控制前面的空格
  21.     print(' ' * (s - i), end='')
  22.     for j in range(i + 1):
  23.         # 控制数字之间的空格
  24.         print(triangle[i][j], end=' ')
  25.     print()
复制代码

这样修改后,无论阶数是奇数还是偶数,输出的杨辉三角都应该是一个等腰三角形的形状,而且格式整齐规整。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 11:11:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 tommyyu 于 2023-8-2 11:12 编辑
  1. """打印一个任意阶数的杨辉三角"""

  2. s = int(input("请输入杨辉三角的阶数:"))
  3. print(s, "阶杨辉三角如下:")

  4. #创建一个s*s的二维列表,并将所有的元素初始化为0
  5. triangle = []
  6. for i in range(s):
  7.     triangle.append([])
  8.     for j in range(s):
  9.         triangle[i].append(0)

  10. #计算杨辉三角
  11. #根据观察可以发现,杨辉三角左右两边的元素均为1
  12. for i in range(s):
  13.     triangle[i][0] = 1
  14.     triangle[i][i] = 1

  15. #第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
  16. for i in range(2, s):
  17.     for j in range(1, i):
  18.         triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

  19. #输出杨辉三角
  20. for i in range(s):
  21.     for k in range((s-i)//2):
  22.         print('\t', end='')
  23.     for j in range(i+1):
  24.         if s % 2 + i % 2 == 1:
  25.             print("    ", end='')
  26.         print(triangle[i][j], end='\t')
  27.     print()
复制代码
只需要改动 29 行的判断条件即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 11:18:32 | 显示全部楼层
我稍微修改一下二维列表打印的部分。为了使每一行的缩进看起来整齐,我们需要注意在打印每个数字之前添加足够的空格(或制表符)。下面是修改后的代码片段:

  1. s = int(input("请输入杨辉三角的阶数:"))
  2. print(s, "阶杨辉三角如下:")

  3. #创建一个s*s的二维列表,并将所有的元素初始化为0
  4. triangle = []
  5. for i in range(s):
  6.     triangle.append([])
  7.     for j in range(s):
  8.         triangle[i].append(0)

  9. #计算杨辉三角
  10. #根据观察可以发现,杨辉三角左右两边的元素均为1
  11. for i in range(s):
  12.     triangle[i][0] = 1
  13.     triangle[i][i] = 1

  14. #第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
  15. for i in range(2, s):
  16.     for j in range(1, i):
  17.         triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

  18. #输出杨辉三角
  19. for i in range(s):
  20.     for k in range(s - i):
  21.         print(' ', end='')
  22.     for j in range(i + 1):
  23.         if i % 2 == 1:
  24.             print(' ', end='')
  25.         print(triangle[i][j], end=' ')
  26.     print()
复制代码

这段代码首先产生一个全为0的2D列表。然后,将每一行的第一个和最后一个元素设为1。随后,剩余的每个元素都被设置为其左上角和上方的元素之和。此外,为了在行与行之间保持对齐,每一行的开始部分都打印了相应数量的空格。

楼主给个最佳答案呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 11:40:53 | 显示全部楼层
tommyyu 发表于 2023-8-2 11:11
只需要改动 29 行的判断条件即可。

感谢你,我已经给你设置了最佳答案
大佬可以帮我解释一下输出杨辉三角中'\t'的意思吗?
感激不尽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 11:42:29 | 显示全部楼层
小儿无赖 发表于 2023-8-2 11:40
感谢你,我已经给你设置了最佳答案
大佬可以帮我解释一下输出杨辉三角中'\t'的意思吗?
感激不尽

https://blog.csdn.net/weixin_45772041/article/details/108861310
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 11:43:47 | 显示全部楼层
isdkz 发表于 2023-8-2 11:08
我明白你的意思了,你希望输出的杨辉三角是一个等腰三角形的形状,而不是直角三角形。对于奇数阶的杨辉三 ...

等腰三角形是成功了,但是随着数字的增大,右边的三角形会不齐,还有一点小瑕疵,但是也感谢大佬的指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 11:49:35 | 显示全部楼层
tommyyu 发表于 2023-8-2 11:42
https://blog.csdn.net/weixin_45772041/article/details/108861310

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 09:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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