带两个输入的空心平方函数?

时间:2018-08-19 18:19:50

标签: python python-3.x

我一直在努力创建一个函数,该函数可以放出默认的5x5空心正方形,但也可以接受2个输入。

这是问题: 创建一个charsqr.py函数,该函数在导入时将导致以下结果:

程序:

def main():
    charsqr()
    charsqr(4)
    charsqr(3,'#')
main()

结果:

*****
*   *
*   *
*   *
*****
****
*  *
*  *
****
###
# #
###

这是我的代码:

def charsqr(chars,sym):

if type(chars) = int and type(sym)=str:
    print(str(sym)*chars)
    for i in range(chars-2):
        print(str(sym)+" "*(chars-2)+str(sym))
    print(str(sym)*chars)        


else:
    print("*"*5)
    for i in range(5):
        print("*"+" "*3+"*")
    print("*"*5)  

我一直在摆弄if语句,因为我一直遇到“缺少2个位置参数”错误。我知道如何创建空心正方形,只是不确定如何使程序先打印默认正方形,然后再打印具有给定“字符”的正方形,而无需“符号”。

任何反馈表示赞赏! :)

2 个答案:

答案 0 :(得分:0)

您显然希望一个函数,如果未说明任何字符,则使用星号;如果未说明大小,则使用大小5。那就是Python中默认参数的含义:

def charsqr(chars=5, sym='*'):

然后,调用charsqr()charsqr(5, '*')相同,调用charsqr(4)charsqr(4, '*')相同。调用charsqr(3, '#')不使用默认值。

请注意,您显示的代码缩进不正确,并且会出现语法错误。使函数的行缩进(除了def行之外的所有行)。同样,将=行中的if符号替换为==。经过这三个更改,您的代码可以工作并提供所需的输出。

答案 1 :(得分:0)

您将这种方式变得非常复杂,简单:

def draw_square(size=5, edge="*", fill=" "):
    hollow = size - 2  # just so we don't calculate the hollow part each time
    print(edge * size)  # top part
    for _ in range(hollow):  # iterate until the last line
        print(edge + fill * hollow + edge)  # middle part
    print(edge * size)  # bottom part

应该做到这一点。您甚至可以将“空心”部分更改为某些字符。