【Python】文本对齐方式
一、题目
In Python, a string of test can be aligned left, right and cneter.
.ljust(width)
This method returns a left aligned string of length width.
>>> width = 20
>>> print 'HackerRank'.ljust(width,'-')
HackerRank----------
.center(width)
This method returns a centered string of length width.
>>> width = 20
>>> print 'HackerRank'.center(width,'-')
-----HackerRank-----
.rjust(width)
This method returns a right aligned string of length width.
>>> width = 20
>>> print 'HackerRank'.rjust(width,'-')
----------HackerRank
Task
You are given a partial code that is used for generating the HackerRank Logo of variable thickness.
Sample Input
5
Sample Output
H HHH HHHHH HHHHHHH
HHHHHHHHHHHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHHHHHH HHHHHHH HHHHH HHH H
二、代码
# Replace all ______ with rjust, ljust or center.# This must be an odd number
thickness = int(input())
c = 'H'# Top Cone
for i in range(thickness):print((c*i).rjust(thickness-1)+c+(c*i).ljust(thickness-1))# Top Pillars
for i in range(thickness+1):print((c*thickness).center(thickness*2)+(c*thickness).center(thickness*6))# Middle Belt
for i in range((thickness+1)//2):print((c*thickness*5).center(thickness*6))# Bottom Pillars
for i in range(thickness+1):print((c*thickness).center(thickness*2)+(c*thickness).center(thickness*6))# Bottom Cone
for i in range(thickness):print(((c*(thickness-i-1)).rjust(thickness)+c+(c*(thickness-i-1)).ljust(thickness)).rjust(thickness*6))
三、解读
题目要求打印一个HackerRank Logo,Logo的厚度由用户输入的奇数决定。
thickness = int(input())
- 用户输入厚度值,并转换成整数,请注意这里需要输入奇数。
c = 'H'
- 定义一个字符c,并设置为'H'
# Top Cone
for i in range(thickness):print((c * i).rjust(thickness - 1) + c + (c * i).ljust(thickness - 1))
- 这部分代码打印Logo的顶部圆锥部分。
- for i in range(thickness) : 确定圆锥的行数(厚度)
- (c * i).rjust(thickness - 1) 生成 i 个 'H' 字符并右对齐到 thickness - 1 的宽度。
- c 是中间的单个'H'字符
- (c * i).ljust(thickness - 1) 生成 i 个 'H' 字符并左对齐到 thickness - 1 的宽度
- 这些部分合并后打印成顶部圆锥的形状
# Top Cone
thickness = 5 for i in range(thickness):print((c * i).rjust(thickness - 1))
HHHHHH HHHH
thickness = 5 for i in range(thickness):print((c * i).rjust(thickness - 1) + c)
HHHHHHHHHH HHHHH
thickness = 5 for i in range(thickness):print((c * i).rjust(thickness-1) + c + (c * i).ljust(thickness - 1))
H HHH HHHHH HHHHHHH HHHHHHHHH
# Top Pillars
for i in range(thickness + 1):print((c * thickness) * center(thickness * 2) + (c * thickness).center(thickness * 6))
- 这部分代码打印Logo的顶部支柱部分
- for i in range(thickness + 1) :循环从 0 到 thickness
- (c * thickness).center(thickness * 2) :生成 thickness 个 'H' 字符并居中对齐到 thickness * 2 的宽度
- (c * thickness).center(thickness * 6) :生成 thickness 个 'H' 字符并居中对齐到 thickness * 6 的宽度,这用于在支柱之间添加空格。
- 这些部分合并后打印成顶部支柱的形状。
# Top Pillars
print((c * thickness) * center(thickness * 2) + (c * thickness).center(thickness * 6))
thickness = 5 for i in range(thickness + 1):print((c * thickness) * center(thickness * 2))
HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH
thickness = 5 for i in range(thickness + 1):print((c * thickness) * center(thickness * 2) + (c * thickness).center(thickness * 6))
HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH
# Middle Belt
for i in range((thickness + 1) // 2):print((c * thickness * 5).center(thickness * 6))
- 这部分代码打印 Logo 的中间腰带部分。
- for i in range((thickness+1)//2): 循环从 0 到 (thickness + 1) // 2 - 1,确保中间腰带的行数是奇数。
- (c*thickness*5).center(thickness*6) 生成 thickness * 5 个 'H' 字符并居中对齐到 thickness * 6 的宽度。
# Middle Belt
print((c * thickness * 5).center(thickness * 6))
thickness = 5 for i in range((thickness + 1)//2):print((c * thickness * 5).center(thickness * 6))
HHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHH
# Bottom Pillars
for i in range(thickness + 1):print((c * thickness).center(thickness * 2) + (c * thickness).center(thickness * 6))
- 这部分代码打印 Logo 的底部支柱部分,与顶部支柱类似。
- for i in range(thickness+1): 循环从 0 到 thickness。
- (c*thickness).center(thickness*2) 和 (c*thickness).center(thickness*6) 分别用于打印支柱和支柱之间的空格。
# Bottom Pillars
thickness = 5 for i in range(thickness + 1):print((c * thickness).center(thickness * 2))
HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH
thickness = 5 for i in range(thickness + 1):print((c * thickness).center(thickness * 2) + (c * thickness).center(thickness * 6))
HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH HHHHH
# Bottom Cone
for i in range(thickness):print(((c * (thickness - i - 1)).rjust(thickness) + c + (c * (thickness - i - 1)).ljust(thickness)).rjust(thickness * 6))
- 这部分代码打印 Logo 的底部圆锥部分。
- for i in range(thickness): 循环从 0 到 thickness - 1。
- (c*(thickness-i-1)).rjust(thickness) 生成 (thickness - i - 1) 个 'H' 字符并右对齐到 thickness 的宽度。
- c 是中间的单个 'H' 字符。
- (c*(thickness-i-1)).ljust(thickness) 生成 (thickness - i - 1) 个 'H' 字符并左对齐到 thickness 的宽度。
- 这些部分合并后,整体再使用 rjust(thickness*6) 右对齐到 thickness * 6 的宽度,确保底部圆锥与顶部圆锥对齐。
# Bottom Cone
thickness = 5 for i in range(thickness):print((c * (thickness - i - 1)).rjust(thickness))
HHHHHHHHHH
thickness = 5 for i in range(thickness):print((c * (thickness - i - 1)).rjust(thickness) + c)
HHHHHHHHHHHHHHH
thickness = 5 for i in range(thickness):print((c * (thickness - i - 1)).rjust(thickness) + c + (c * (thickness - i - 1)).ljust(thickness))
HHHHHHHHH HHHHHHH HHHHH HHH H
thickness = 5 for i in range(thickness):print(((c * (thickness - i - 1)).rjust(thickness) + c + (c * (thickness - i - 1)).ljust(thickness)).rjust(thickness * 6))
HHHHHHHHH HHHHHHH HHHHH HHH H