我无法通过print和str.center获得所需的输出

时间:2018-08-22 15:39:05

标签: python python-3.x

我一直在尝试打印设计师门垫,但无法获得理想的结果。垫子只能包含这些 | ,-,。特殊字符。 这里N是行数,其中M是宽度。在两者之间应显示“欢迎”。

我的代码:

N, M = 4, 12
for i in range(1, N, 2):
    print(str(".|." * i).center(M, '-'))
print("WELCOME".center(M, '-'))
for i in range(N-2, -1, -2):
    print(str(".|." * i).center(M,"-"))

我的结果:

----.|.-----
-.|..|..|.--
--WELCOME---
---.|..|.---
------------

所需的输出:

----.|.-----
-.|..|..|.--
--WELCOME---
-.|..|..|.--
----.|.-----

2 个答案:

答案 0 :(得分:1)

组装顶部零件,将其与欢迎纸一起打印,然后将底部的背面打印为底部,可能更容易吗?

N, M = 4, 12
top = [('.|.' * i).center(M, '-') for i in range(1, N, 2)]
print(*top, 'WELCOME'.center(M, '-'), *top[::-1], sep='\n')

给你:

----.|.-----
-.|..|..|.--
--WELCOME---
-.|..|..|.--
----.|.-----

比起使用列表切片,更明确的一点是使用reversed,在功能上相同,但阅读起来更容易,例如:

print(*top, 'WELCOME'.center(M, '-'), *reversed(top), sep='\n')

答案 1 :(得分:0)

s = input()
lst = s.split();
n = int(lst[0])
m = int(lst[1])

s= ['.|.','WELCOME'] 
n1 = (n-1)//2

for i in range(1,2*n1, 2):
    print((s[0]*i).center(m, '-'))

print(s[1].center(m,'-'))

for i in range(((2*n1)-1), 0,-2):
    print((s[0]*i).center(m, '-'))