一、题目
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
HHHHHHHHH
HHHHH HHHHH
HHHHH 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 的宽度
- 这些部分合并后打印成顶部圆锥的形状
这里用三种颜色代表 print 的三个部分:
# Top Cone
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))
H
HHH
HHHHH
HHHHHHH
HHHHHHHHHHHHHH 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))
H
HHH
HHHHH
HHHHHHH
HHHHHHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
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) 分别用于打印支柱和支柱之间的空格。
print((c * thickness).center(thickness * 2) + (c * thickness).center(thickness * 6))
H
HHH
HHHHH
HHHHHHH
HHHHHHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHH HHHHH
HHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHH
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 的宽度,确保底部圆锥与顶部圆锥对齐。
print(((c * (thickness - i - 1)).rjust(thickness) + c + (c * (thickness - i - 1)).ljust(thickness)).rjust(thickness * 6))
H
HHH
HHHHH
HHHHHHH
HHHHHHHHH
HHHHH HHHHH
HHHHH 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