第024讲:列表(VI) _ 课后测试题的最后一题的杨辉三角形答案小甲鱼好像写错了。
小甲鱼这一题的代码好像写错了,那么请问一下大家这一题的的代码应该怎么写啊?# 初始化杨辉三角形
# 创建一个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
并不是正常的三角形:
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 8436 9 1
小甲鱼的代码确实有误,主要问题在列表初始化和元素赋值部分。以下是修正后的代码,使用固定宽度空格实现完美对齐的杨辉三角形:
# 初始化10x10二维列表
triangle = []
for i in range(10):
row = []
for j in range(10):
row.append(0)
triangle.append(row)
# 设置边界为1
for i in range(10):
triangle = 1# 每行第一个元素
if i > 0:
triangle = 1# 每行最后一个元素
# 计算内部元素
for i in range(2, 10):
for j in range(1, i):
triangle = triangle + triangle
# 打印三角形(固定宽度对齐)
for i in range(10):
# 计算行前空格(居中)
indent = " " * (3 * (10 - i))# 每行缩进3个空格
# 隔行错开:偶数行(索引为偶)不加空格,奇数行加2空格
if i % 2 == 1:
indent += ""
# 生成当前行内容
line = []
for j in range(i+1):
# 每个数字占4位(右对齐)
line.append(f"{triangle:>4}")
# 组合输出
print(indent + "".join(line))
输出效果:
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. 列表初始化:使用嵌套循环正确创建10x10二维列表
2. 边界赋值:通过 `triangle` 和 `triangle` 正确设置边界
3. 计算逻辑:`triangle = triangle + triangle`
4. 打印优化:
- 使用固定宽度 `f"{value:>4}"` 实现数字右对齐
- 通过空格缩进实现居中效果
- 奇数行添加2空格实现错开效果
> 提示:如需调整间距,修改第23行 `:>4` 中的数字即可(例如 `:>5` 加宽间距)
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 小甲鱼提供的代码确实存在多处错误,包括列表初始化错误、索引使用不当和格式控制问题。以下是修正后的正确代码:
# 创建10行的杨辉三角
triangle = []
for i in range(10):
# 每行初始化为0列表
row = * (i+1)
# 行首和行尾设为1
row = row[-1] = 1
triangle.append(row)
# 填充中间值 (从第3行开始)
if i >= 2:
for j in range(1, i):
# 当前值 = 上一行左上方值 + 上一行正上方值
triangle = triangle + triangle
# 打印杨辉三角
for i in range(10):
# 居中对齐:计算每行前的空格数
padding = "" * (10 - i - 1)# 每行缩进2个空格
print(padding, end="")
for j in range(len(triangle)):
# 数字格式化为占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. 列表初始化:正确创建二维列表,每行长度递增
2. 计算逻辑:使用 triangle = triangle + triangle 正确计算元素值
3. 输出格式:
- 使用 padding = "" * (10 - i - 1) 实现居中对齐
- 数字统一格式化为4位宽度 f"{value:4d}"
- 移除原代码中导致错位的制表符和额外空格
这样就能输出标准等腰三角形结构的杨辉三角了,每行数字会完美居中对齐。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 根据你提供的代码,确实存在多处错误(如列表初始化错误、索引赋值错误、逻辑错误等)。以下是修正后的正确代码,能输出标准的等腰三角形杨辉三角:
# 创建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]