首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python中的参数打印空正方形

使用Python中的参数打印空正方形
EN

Stack Overflow用户
提问于 2022-10-24 17:38:45
回答 2查看 47关注 0票数 0

我想画正方形的外线。我能够创建一个填充正方形,使用显示的代码,但我不知道如何使它在内部为空。

这就是我所拥有的:

代码语言:javascript
运行
复制
def square(size):
    for x in range(0, size):
        print("*  " * size)
square(5)

我该换什么?

EN

回答 2

Stack Overflow用户

发布于 2022-10-24 17:59:39

如果numpy是一种选择,下面是一种方法:

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
* * * * * * * * * * * * * * *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
*                           *
* * * * * * * * * * * * * * *

没有numpy,您可以使用str.ljust来实现您的目标

代码语言:javascript
运行
复制
def square(size):
    for i in range(0, size):
        if i not in [0, size-1]:
            print('*'.ljust(size*2-2) + '*')
        else:
            print('* ' * size)
票数 1
EN

Stack Overflow用户

发布于 2022-10-24 17:58:16

您逐个打印行的方法是直观和正确的,但是要使正方形内部保持空,您需要根据行发生的位置对行进行不同的处理。准确地说,您只需要在第一行和最后一行打印"*" size时间,中间的行需要记住,它们的边缘只有"*"

您的代码变成:

代码语言:javascript
运行
复制
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)

我建议只打印一次,并以编程方式添加分隔符(例如,"*"之间的空格)。

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74184852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档