鱼C论坛

 找回密码
 立即注册
查看: 2192|回复: 4

零基础入门学习python课后题杨辉三角

[复制链接]
发表于 2023-7-18 12:44:39 | 显示全部楼层 |阅读模式

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

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

x
?.png ?2.png
我感觉代码应该是如图一的,但结果不正确,为什么if语句必须在内层for循环内呢
正确答案如图3 ?3.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-18 12:44:44 | 显示全部楼层
抱歉,你没有提供代码的图示。如果你遇到了关于杨辉三角的问题,请提供你的代码和期望的输出,我会尽力帮助你解决问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 12:44:59 | 显示全部楼层
很抱歉,由于这是一个文本输入环境,我无法查看您提到的图像。然而,我可以根据您提出的问题,给出一些可能的解释。

在实现杨辉三角时,if语句常常被用于控制元素的生成,因此它通常位于内层for循环中。

杨辉三角是这样的一个数列:
  1.     1
  2.    1 1
  3.   1 2 1
  4. 1 3 3 1
  5. 1 4 6 4 1
复制代码
每一行的首位都是1,除此之外的每个数字,都是其正上方的数和左上方的数之和。

用python实现这个数列,代码可能如下:
  1. def generate(numRows):
  2.     res = [[1]]
  3.     for i in range(1, numRows):
  4.         res.append([])
  5.         for j in range(i + 1):
  6.             if j == 0 or j == i:
  7.                 res[ i].append(1)
  8.             else:
  9.                 res[ i].append(res[i - 1][j - 1] + res[i - 1][j])
  10.     return res
复制代码
这里的if语句被用于判断当前位置是否为每行的首位或末位,是的话直接添加1,不是的话则根据杨辉三角的规则添加数字。

这就是为什么if语句需要在内层for循环内的原因。因为需要针对每一个位置(即内层循环的每一次迭代)进行判断和处理。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 16:10:02 | 显示全部楼层
本帖最后由 yinda_peng 于 2023-7-18 16:15 编辑

想一想,放外层的话,就只能在偶数行执行一次,那么就只能在第一个元素那里隔开一次,然后第二个元素接着第一个元素,少了空格,就刚好跟后面对齐了没有隔开。

  1. triangle = []
  2. for i in range(10):
  3.     triangle.append([])
  4.     for j in range(10):
  5.         triangle[i].append(0)

  6. for i in range(10):
  7.     triangle[i][0] = 1
  8.     triangle[i][i] = 1

  9. for i in range(2,10):
  10.     for j in range(1,i):
  11.         triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

  12. count = 0
  13. for i in range(10):
  14.     for k in range((10-i)//2):
  15.         print('\t',end = '')

  16.     if i % 2 == 1:
  17.         print("    ",end = '')
  18.         count+=1

  19.     for j in range(i+1):
  20. #        if i % 2 == 1:
  21. #            print("    ",end = '')
  22. #            count+=1
  23.         print(triangle[i][j],end = '\t')
  24.     print()

  25. print(count)
复制代码

用这个代码测试,加了测试值count,你会发现放在外层只执行了5次,而在内层执行了30次
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-29 10:48:14 | 显示全部楼层
yinda_peng 发表于 2023-7-18 16:10
想一想,放外层的话,就只能在偶数行执行一次,那么就只能在第一个元素那里隔开一次,然后第二个元素接着第 ...

为什么偶数行第二个元素跟第一个元素的间隔只有四个空格呢,第28行代码 print(triangle[i][j],end = '\t')   里的  \t  不应该是八个空格吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 07:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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