Python中的打印模式

bweufnob  于 2023-02-01  发布在  Python
关注(0)|答案(4)|浏览(175)

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
vh0rcniy

vh0rcniy1#

您的答案与预期不符,因为您将同一对象t添加到answer列表中两次:

answer.insert(0, t)
answer.append(t)

更具体地说,当你赋值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(...) .

ljsrvy3e

ljsrvy3e2#

n=5
answer=[[1]]
for i in range(2, n+1):
    t=[i]*((2*i)-3)
    answer.insert(0, t)
    answer.append(t.copy())
    for a in answer:
        a.insert(0,i)
        a.append(i)
answerfinal=[]
for a in answer:
    answerfinal.append(str(a).replace(' ','').replace(',','').replace(']','').replace('[',''))
for a in answerfinal:
    print(a)
fv2wmkja

fv2wmkja3#

n = int(input())
for i in range(1,n*2):
    for j in range(1,n*2):
        if i <= j<=n*2-i: print(n-i+1,end='')
        elif i>n and i>=j >= n*2 -i : print(i-n+1,end='')
        elif  j<=n: print(n-j+1,end="")
        else: print(j-n+1,end='')
    print()
vd8tlhqk

vd8tlhqk4#

n = int(input())
k = 2*n - 1

for i in range(k):
    for j in range(k):
        a = i if i<j else j
        a = a if a<k-i else k-i-1
        a = a if a<k-j else k-j-1
        print(n-a, end = '')
    print()

相关问题