1365156784 发表于 2023-7-18 12:44:39

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


我感觉代码应该是如图一的,但结果不正确,为什么if语句必须在内层for循环内呢
正确答案如图3

陶远航 发表于 2023-7-18 12:44:44

抱歉,你没有提供代码的图示。如果你遇到了关于杨辉三角的问题,请提供你的代码和期望的输出,我会尽力帮助你解决问题。

isdkz 发表于 2023-7-18 12:44:59

很抱歉,由于这是一个文本输入环境,我无法查看您提到的图像。然而,我可以根据您提出的问题,给出一些可能的解释。

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

杨辉三角是这样的一个数列:

    1
   1 1
1 2 1
1 3 3 1
1 4 6 4 1

每一行的首位都是1,除此之外的每个数字,都是其正上方的数和左上方的数之和。

用python实现这个数列,代码可能如下:

def generate(numRows):
    res = []
    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 + res)
    return res

这里的if语句被用于判断当前位置是否为每行的首位或末位,是的话直接添加1,不是的话则根据杨辉三角的规则添加数字。

这就是为什么if语句需要在内层for循环内的原因。因为需要针对每一个位置(即内层循环的每一次迭代)进行判断和处理。

yinda_peng 发表于 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.append(0)

for i in range(10):
    triangle = 1
    triangle = 1

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

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,end = '\t')
    print()

print(count)
用这个代码测试,加了测试值count,你会发现放在外层只执行了5次,而在内层执行了30次

1365156784 发表于 2023-7-29 10:48:14

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

为什么偶数行第二个元素跟第一个元素的间隔只有四个空格呢,第28行代码 print(triangle,end = '\t')   里的\t不应该是八个空格吗
页: [1]
查看完整版本: 零基础入门学习python课后题杨辉三角