前言: {\color{Blue}前言:} 前言:本系列题使用的是“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度,如有需要可以直接查看对应专栏。发布个人的刷题笔记的同时,也是希望可以帮助到有需要的人,我会尽量的解释每一步代码,如有错误或者可以优化的地方还望各位CSDN的朋友可以指出来。更新速度预计是每天不定时更新三道,若当天没有更新后期将会补上。
题目
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式
输入在第一行给出一个正整数
N
(
<
100
)
N(<100)
N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列
N
N
N个字符(除了最后一列可能不足
N
N
N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
题解
# 输入每一字列的符数
N = int(input())
"""
这里的N其实就是输出列表的总行数"""
# 输入字符串
text = input()
# 计算总列数
cols = (len(text) + N - 1) // N
"""
为了确保字符能够完整排版,可以考虑在不足一行的情况下,增加一列,
这样排版后能够包含所有字符。即在未满一行时,增加额外的一列,
然后进行整除操作得到总行数。"""
# 初始化二维列表,用于存储排版后的结果
grid = [[' '] * cols for _ in range(N)]
"""
[[' '] * cols]:这部分创建了一个大小为 cols 的一维列表,
其中每个元素都是一个空格字符 ' '。
这个一维列表会在每行都是一样的,因为它包含了相同的空格元素。
for _ in range(N):这部分用于创建多个相同的一维列表,
通过循环 N 次。在这里,使用了一个占位符 _,表示在循环中不使用循环变量。"""
# 将字符串按古风排版填入二维列表中
for i in range(len(text)):
row = i % N # 计算当前字符在哪一行
col = cols - 1 - i // N # 计算当前字符在哪一列
grid[row][col] = text[i]
# 输出古风排版结果
for row in grid:
print(''.join(row))
"""
''.join(row) 这个表达式使用了字符串的 join 方法,
它接受一个可迭代对象(在这里是字符列表 row),
将其中的元素连接成一个字符串,连接的方式是在每个元素之间插入一个空字符串 ''。"""