从命令行参数打印出瓷砖
Posted
技术标签:
【中文标题】从命令行参数打印出瓷砖【英文标题】:print out tiles from command line argument 【发布时间】:2020-01-06 03:09:02 【问题描述】:我需要根据命令行参数打印图块,其中第一个参数是宽度,第二个是名称。 例如:
$ python tile.py 5 tommy
------+|+------
---+|++|++|+---
-----TOMMY-----
---+|++|++|+---
------+|+------
或
$ python tile.py 7 Samuel
---------+|+---------
------+|++|++|+------
---+|++|++|++|++|+---
--------SAMUEL-------
---+|++|++|++|++|+---
------+|++|++|+------
---------+|+---------
因为有一些限制:宽度只能是奇数,名字的长度不能超过3*宽度。
我很困惑如何做垂直部分,因为它可以是 5 层、7 层或更多层
import sys
a = int(sys.argv[1])
if a%2==0:
print('Error: tile height must be an odd number')
else:
if len(sys.argv[2])>(3*a):
print('Error: name must fit within characters'.format(3*a))
else:
print('-'*((3*a-3)/2)+'+-+'+'-'*((3*a-3)/2))
print('-'*((3*a-9)/2))
【问题讨论】:
在我看来,宽度和高度总是相同的,因为你总是将“-”的数量减少 2,直到剩下最少 3,所以对于宽度 = 9,一个一行将有 9 '-' 一个将有 7,然后是 5,然后是 3,这是 4 行,然后是名称的一行,然后以相反的顺序再有 4 行,所以总共 9 个 【参考方案1】:您可以使用字符串函数str.center
来简化填充。除此之外,您只需使用循环向上计数然后向下计数,利用列表中的 python str.join
和 *
运算符:
# Growing width Name Shrinking width
widths = list(range(a//2)) + [-1] + list(reversed(range(a//2)))
for k in widths:
# Print name if we're halfway there
if k == -1:
# Print name in uppercase, centered over 3*a characters, padded with '-'
print(name.upper().center(3*a,'-'))
else:
# Repeat '+|+' 1+2k number of times,
# join with nothing in between and center, padding with '-'
print("".join(["+|+"]*(1+2*k)).center(3*a,'-'))
【讨论】:
以上是关于从命令行参数打印出瓷砖的主要内容,如果未能解决你的问题,请参考以下文章
在 bash for 循环中使用命令行参数范围打印包含参数的括号