1.问题
给定一个正整数n,打印输出示例中所示的模式。
已经提供了一个代码。您必须自己理解代码的逻辑,并尝试更改代码以使其提供正确的输出。
1.1细节
输入:正整数n,1〈= n〈= 9
输出:模式如下例所示
样品输入:
4
样本输出:
4444444
4333334
4322234
4321234
4322234
4333334
4444444
样品输入:
5
样本输出:
555555555
544444445
543333345
543222345
543212345
543222345
543333345
544444445
555555555
2.我的答案
2.1我的代码
n=int(input())
answer=[[1]]
for i in range(2, n+1):
t=[i]*((2*i)-3)
answer.insert(0, t)
answer.append(t)
for a in answer:
a.insert(0,i)
a.append(i)
print(answer)
outlst = [' '.join([str(c) for c in lst]) for lst in answer]
for a in outlst:
print(a)
2.2我的输出
Input: 4
4 4 4 4 4 4 4 4 4
4 4 3 3 3 3 3 3 3 4 4
4 4 3 3 2 2 2 2 2 3 3 4 4
4 3 2 1 2 3 4
4 4 3 3 2 2 2 2 2 3 3 4 4
4 4 3 3 3 3 3 3 3 4 4
4 4 4 4 4 4 4 4 4
2.3预期输出
4444444
4333334
4322234
4321234
4322234
4333334
4444444
4条答案
按热度按时间vh0rcniy1#
您的答案与预期不符,因为您将同一对象
t
添加到answer
列表中两次:更具体地说,当你赋值
t = [i]*(2*i - 3)
时,会创建一个新的数据结构[i, ..., i]
,t
只指向这个数据结构,然后你把指针t
放到answer
列表中两次。在
for a in answer
循环中,当你使用a.insert(0, i)
和a.append(i)
时,你更新了a
所指向的数据结构。因为你在指向同一个数据结构的两个指针上调用insert(0, i)
和append(i)
,你实际上将i
插入和追加到那个数据结构中两次。这就是为什么你最终得到了比你需要的更多的数字。相反,您可以只对
answer
列表中的上半部分行(以及创建时没有行对的中间行)运行循环for a in answer
,例如for a in answer[:(len(answer)+1)/2]
。您可以做的其他事情:
append([i]*(2*i-3))
。文字表达式每次都会创建一个新的数据结构。append(t.copy())
。copy
方法使用数据结构的“浅”副本创建新的列表对象。另外,由于在
' '.join(...)
中使用了一个非空字符串,所以输出数字是用空格分隔的,应该使用空字符串:''.join(...)
.ljsrvy3e2#
fv2wmkja3#
vd8tlhqk4#