我想画正方形的外线。我能够创建一个填充正方形,使用显示的代码,但我不知道如何使它在内部为空。
这就是我所拥有的:
def square(size):
for x in range(0, size):
print("* " * size)
square(5)
我该换什么?
发布于 2022-10-24 17:59:39
如果numpy是一种选择,下面是一种方法:
import numpy as np
def square(size):
square = np.ones((size, size), dtype='object')
square[1:-1, 1:-1] = ' '
square[square==1] = '*'
print('\n'.join([' '.join([str(elem) for elem in row]) for row in square]))
square(15)
输出:
* * * * * * * * * * * * * * *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* * * * * * * * * * * * * * *
没有numpy,您可以使用str.ljust
来实现您的目标
def square(size):
for i in range(0, size):
if i not in [0, size-1]:
print('*'.ljust(size*2-2) + '*')
else:
print('* ' * size)
发布于 2022-10-24 17:58:16
您逐个打印行的方法是直观和正确的,但是要使正方形内部保持空,您需要根据行发生的位置对行进行不同的处理。准确地说,您只需要在第一行和最后一行打印"*"
size
时间,中间的行需要记住,它们的边缘只有"*"
。
您的代码变成:
def square(size):
# first row (all need to be filled)
print("* " * size)
# inner rows, we only print "*" at the start and at the end, the middle is empty
for x in range(0, size-2):
print("* " + " "*(size-2) + "*")
# last row (all need to be filled)
print("* " * size)
square(5)
我建议只打印一次,并以编程方式添加分隔符(例如,"*"
之间的空格)。
def square(size):
sep = " "
letter = "*"
# keep track of what we want to print
rows = []
# first row
rows.append([letter] * size)
# middle rows
for x in range(0, size-2):
rows.append([letter] + [" "] * (size-2) + [letter])
# last row
rows.append([letter] * size)
# join() lists with symbol and line separator
print("\n".join([sep.join(row) for row in rows]))
square(5)
https://stackoverflow.com/questions/74184852
复制相似问题