WENZH 发表于 2025-8-10 15:04:40

第024讲:列表(VI) _ 课后测试题的最后一题答案的代码好像有问题

本帖最后由 WENZH 于 2025-8-10 15:06 编辑

小甲鱼这一题的代码好像写错了,那么请问一下大家这一题的的代码应该怎么写啊?
# 初始化杨辉三角形
# 创建一个10*10的二维列表,并将所有的元素初始化为0
triangle = []
for i in range(10):
    triangle.append([])
    for j in range(10):
      triangle.append(0)
   
# 计算杨辉三角形
# 根据观察,我们知道杨辉三角形左右两边的元素均为1
for i in range(10):
    triangle = 1
    triangle = 1
   
# 第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
for i in range(2, 10):
    for j in range(1, i):
      triangle = triangle + triangle
   
# 输出杨辉三角形
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, end='\t')
    print()

这个输出之后的效果是这样的:
                                 1       
                                  1          1       
                                1        2        1       
                          1          3          3          1       
                        1        4        6        4        1       
                  1          5          10          10          5          1       
                1        6        15        20        15        6        1       
          1          7          21          35          35          21          7          1       
        1        8        28        56        70        56        28        8        1       
    1          9          36          84          126          126          84          36          9          1       

FishC 发表于 2025-8-10 15:05:44

根据你提供的代码,确实存在多处错误(如列表初始化错误、索引赋值错误、逻辑错误等)。以下是修正后的正确代码,能输出标准的等腰三角形杨辉三角:

# 创建10x10的二维列表并初始化为0
triangle = []
for i in range(10):
    row = * 10# 创建一行10个0
    triangle.append(row)

# 初始化杨辉三角的边
for i in range(10):
    triangle = 1# 每行第一个元素为1
    triangle = 1# 每行对角线元素为1

# 计算内部元素
for i in range(2, 10):
    for j in range(1, i):
      # 当前元素 = 左上角元素 + 上方元素
      triangle = triangle + triangle

# 输出杨辉三角
for i in range(10):
    # 打印行前空格(居中效果)
    for k in range(10 - i):
      print("", end="")# 两个空格为一个单位
   
    for j in range(i + 1):
      # 打印数字(固定占4位宽度)
      print(f"{triangle:4d}", end="")
    print()# 换行

输出效果:
1
                  1   1
                1   2   1
            1   3   3   1
            1   4   6   4   1
          1   51010   5   1
      1   6152015   6   1
      1   721353521   7   1
    1   82856705628   8   1
1   93684 126 1268436   9   1

关键修正点:
1. 列表初始化:使用 row = *10 正确创建子列表
2. 元素赋值:使用 triangle 双索引访问
3. 计算公式:正确使用 triangle + triangle
4. 输出优化:
   - 使用 f"{num:4d}" 固定数字宽度
   - 行前空格数 = 10 - i(递减)
   - 移除原代码中导致错位的隔行空格

> 提示:调整 range(10-i) 中的空格数量可改变三角形位置,调整 :4d 的数字可改变列宽。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 第024讲:列表(VI) _ 课后测试题的最后一题答案的代码好像有问题