鱼C论坛

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

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

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

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

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

x
?.png ?2.png
我感觉代码应该是如图一的,但结果不正确,为什么if语句必须在内层for循环内呢
正确答案如图3 ?3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

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

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

这就是为什么if语句需要在内层for循环内的原因。因为需要针对每一个位置(即内层循环的每一次迭代)进行判断和处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想一想,放外层的话,就只能在偶数行执行一次,那么就只能在第一个元素那里隔开一次,然后第二个元素接着第一个元素,少了空格,就刚好跟后面对齐了没有隔开。
triangle = []
for i in range(10):
    triangle.append([])
    for j in range(10):
        triangle[i].append(0)

for i in range(10):
    triangle[i][0] = 1
    triangle[i][i] = 1

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

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

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

    for j in range(i+1):
#        if i % 2 == 1:
#            print("    ",end = '')
#            count+=1
        print(triangle[i][j],end = '\t')
    print()

print(count)
用这个代码测试,加了测试值count,你会发现放在外层只执行了5次,而在内层执行了30次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

为什么偶数行第二个元素跟第一个元素的间隔只有四个空格呢,第28行代码 print(triangle[i][j],end = '\t')   里的  \t  不应该是八个空格吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 07:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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