天天蓝海

  • 首页
  • Python学习
    • HackRank挑战
  • 纪念墙
天天蓝海
学习、记录
  1. 首页
  2. Python学习
  3. HackRank挑战
  4. 正文

【Python学习】-Hackrank挑战-字符串-字符画生成

2025年3月13日 376点热度 0人点赞 0条评论

题目:字符画生成--Designer Door Mat


题目要求:

输入格式

单行包含空格分隔的值n和m

其中m为n*3

生成例图中的字符画

解题代码:

方法1:普通逻辑进行顺序生成

n, m = map(int, input().split())
s = '.|.'
c = '-'
w = 'WELCOME'
middle_n = (n + 1) // 2
​
for i in range(1, n + 1):
   if i < middle_n:
       # 计算两侧填充字符的数量
       padding = (m - (i * 2 - 1) * len(s)) // 2
       print(c * padding + (s * (i * 2 - 1)) + c * padding)
   elif i == middle_n:
       padding = (m - len(w)) // 2
       print(c * padding + w + c * padding)
   else:
       # 对称位置的索引
       sym_i = n - i + 1
       padding = (m - (sym_i * 2 - 1) * len(s)) // 2
       print(c * padding + (s * ((sym_i * 2 - 1))) + c * padding)

方法2,:切片转置生成

n, m = map(int, input().split())
s = '.|.'
w = 'WELCOME'
middle = (n + 1) // 2
​
# 上半部分
upper = []
for i in range(1, middle):
   pattern = s * (2 * i - 1)
   upper.append(pattern.center(m, '-'))
​
# 中间部分
middle_line = w.center(m, '-')
​
# 下半部分,即为上半部分的转置
lower = upper[::-1]
​
# 拼接打印
print('\n'.join(upper + [middle_line] + lower))

官方解答:考察str.center(width[, fillchar])

N,M = map(int,input().split())
for i in range(1, N, 2):
   print(str('.|.'*i).center(M, '-'))
print(str('WELCOME').center(M, '-'))
for i in range(N-2, -1, -2):
   print(str('.|.'*i).center(M, '-'))
标签: HackRank Challenge
最后更新:2025年3月13日

timmyblue

我们没有说再见,只是很默契的没有打扰。

点赞
< 上一篇
下一篇 >

归档

  • 2025 年 3 月
  • 2025 年 2 月

分类

  • HackRank挑战
  • Python学习

Copyright © 天天蓝海 All Rights Reserved.

苏ICP备2025161349号