Python——在中间形成两条线和三个星号

Python——在中间形成两条线和三个星号,python,ascii-art,Python,Ascii Art,我应该要求用户输入一个数字,然后打印出以下形状: 用户输入=1(1个单位高,两条线之间1个单位) 用户输入=2(两个单位高,两个单位之间) 用户输入=3 ********* * * * * * * * * * ********* 等等 现在,我得到一个带有用户输入号码的空心正方形: side = int(input("Choose a number: ")) inner = side - 2 print ('*' * side) for i in range(inner

我应该要求用户输入一个数字,然后打印出以下形状:

用户输入=1(1个单位高,两条线之间1个单位)

用户输入=2(两个单位高,两个单位之间)

用户输入=3

*********
*   *   *
*   *   *
*   *   *
*********
等等

现在,我得到一个带有用户输入号码的空心正方形:

side = int(input("Choose a number: "))
inner = side - 2
print ('*' * side)
for i in range(inner):
    print ('*' + ' ' * inner + '*')
print ('*' * side)

通常,当你想解决ASCII艺术问题时,首先要分析图像。我们在这里看到的是,每个图像:

  • 第一行有
    2*n+3
    星号
  • 然后是带有星号的
    n
    行、
    n
    空格、星号、
    n
    空格和星号;及
  • 带有
    2*n+3
    星号的行
  • 因此,我们可以简单地利用这样一个事实:序列(
    list
    str
    ing,
    tuple
    )乘以一个数字是一个相同类型的序列,它重复给定次数的序列

    因此,对于第一行和最后一行,我们只需编写
    “*”*(2*n+3)
    。中间的行可以用<代码> '*'+'*n+'*+''*n+*′/代码>来构造,我们需要重复<代码> n< /代码>倍。因此,我们可以构建一个包含以下内容的行列表:

    ['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]
    # ^ first     ^ middle line               ^ last line
    
    然后使用
    “\n”。join(..)
    将这些行连接在一起:

    def print_pattern(n):
        print('\n'.join(['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]))
    这将产生:

    >>> print_pattern(1)
    *****
    * * *
    *****
    >>> print_pattern(2)
    *******
    *  *  *
    *  *  *
    *******
    >>> print_pattern(3)
    *********
    *   *   *
    *   *   *
    *   *   *
    *********
    >>> print_pattern(4)
    ***********
    *    *    *
    *    *    *
    *    *    *
    *    *    *
    ***********
    >>> print_pattern(5)
    *************
    *     *     *
    *     *     *
    *     *     *
    *     *     *
    *     *     *
    *************
    
    通过使用
    for
    循环,您还可以使其更具前硬脑膜(尽管这通常被认为不太像Pythonic):

    def print_pattern(n):
        print('*'*(2*n+3))
        for _ in range(n):
            print('*'+' '*n+'*'+' '*n+'*')
        print('*'*(2*n+3))
    或在具有用户输入的程序中:

    def print_pattern(n):
        print('*'*(2*n+3))
        for _ in range(n):
            print('*'+' '*n+'*'+' '*n+'*')
        print('*'*(2*n+3))
    n = int(input("Eliga un número: "))
    print_pattern(n)
    def打印模式(n):
    打印('*'*(2*n+3))
    对于范围内的u(n):
    打印('*'+'''*n+'*'+'''*n+'*'))
    打印('*'*(2*n+3))
    n=int(输入(“Eliga unúmero:”)
    
    打印图案(n)
    通常,当您想解决ASCII艺术问题时,首先要分析图像。我们在这里看到的是,每个图像:

  • 第一行有
    2*n+3
    星号
  • 然后是带有星号的
    n
    行、
    n
    空格、星号、
    n
    空格和星号;及
  • 带有
    2*n+3
    星号的行
  • 因此,我们可以简单地利用这样一个事实:序列(
    list
    str
    ing,
    tuple
    )乘以一个数字是一个相同类型的序列,它重复给定次数的序列

    因此,对于第一行和最后一行,我们只需编写
    “*”*(2*n+3)
    。中间的行可以用<代码> '*'+'*n+'*+''*n+*′/代码>来构造,我们需要重复<代码> n< /代码>倍。因此,我们可以构建一个包含以下内容的行列表:

    ['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]
    # ^ first     ^ middle line               ^ last line
    
    然后使用
    “\n”。join(..)
    将这些行连接在一起:

    def print_pattern(n):
        print('\n'.join(['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]))
    这将产生:

    >>> print_pattern(1)
    *****
    * * *
    *****
    >>> print_pattern(2)
    *******
    *  *  *
    *  *  *
    *******
    >>> print_pattern(3)
    *********
    *   *   *
    *   *   *
    *   *   *
    *********
    >>> print_pattern(4)
    ***********
    *    *    *
    *    *    *
    *    *    *
    *    *    *
    ***********
    >>> print_pattern(5)
    *************
    *     *     *
    *     *     *
    *     *     *
    *     *     *
    *     *     *
    *************
    
    通过使用
    for
    循环,您还可以使其更具前硬脑膜(尽管这通常被认为不太像Pythonic):

    def print_pattern(n):
        print('*'*(2*n+3))
        for _ in range(n):
            print('*'+' '*n+'*'+' '*n+'*')
        print('*'*(2*n+3))
    或在具有用户输入的程序中:

    def print_pattern(n):
        print('*'*(2*n+3))
        for _ in range(n):
            print('*'+' '*n+'*'+' '*n+'*')
        print('*'*(2*n+3))
    n = int(input("Eliga un número: "))
    print_pattern(n)
    def打印模式(n):
    打印('*'*(2*n+3))
    对于范围内的u(n):
    打印('*'+'''*n+'*'+'''*n+'*'))
    打印('*'*(2*n+3))
    n=int(输入(“Eliga unúmero:”)
    
    打印模式(n)
    您的程序需要做两件主要的事情。首先,您需要计算顶部和底部线条的长度。这是3+2*(用户输入的数字),因为将有3个星号和2个间隙,每个间隙的长度与用户输入的数字相同


    然后你需要使用循环。首先打印出上面计算出的星号数。然后使用循环打印出星号和空格。您可以使循环的每次迭代打印一行,因此循环仅用于打印正确的行数。然后打印与第一行星号匹配的最后一行

    您的程序需要做两件主要的事情。首先,您需要计算顶部和底部线条的长度。这是3+2*(用户输入的数字),因为将有3个星号和2个间隙,每个间隙的长度与用户输入的数字相同


    然后你需要使用循环。首先打印出上面计算出的星号数。然后使用循环打印出星号和空格。您可以使循环的每次迭代打印一行,因此循环仅用于打印正确的行数。然后打印与第一行星号匹配的最后一行

    这应该适合您:

    m = 6
    n = 2
    for i in range(m*n+(m-n)):
        print '*',
    
    print
    for c in range(m):
        for i in range(m):
            print "*",
            for b in range(n):
                print ' ',
    
         print
    
    for i in range(m*n+(m-n)):
    print '*',
    
    print
    

    这应该适合您:

    m = 6
    n = 2
    for i in range(m*n+(m-n)):
        print '*',
    
    print
    for c in range(m):
        for i in range(m):
            print "*",
            for b in range(n):
                print ' ',
    
         print
    
    for i in range(m*n+(m-n)):
    print '*',
    
    print
    
    我使用format()来概括

    def ascing(n, C, patmid = "*{0: <{gap}}*{0: <{gap}}*\n" ):
        mid = (n * patmid).format(' ', gap=n)
        print( "{0}\n{1}{0}".format((3+2*n)*C, mid) )
    
    
    for x in range(1,7):
        ascing(x, '*')
        print("\n====================\n")
    
    defascing(n,C,patmid=“*{0:我使用format()来概括

    def ascing(n, C, patmid = "*{0: <{gap}}*{0: <{gap}}*\n" ):
        mid = (n * patmid).format(' ', gap=n)
        print( "{0}\n{1}{0}".format((3+2*n)*C, mid) )
    
    
    for x in range(1,7):
        ascing(x, '*')
        print("\n====================\n")
    

    def ascing(n、C、patmid=”*{0:您能告诉我们您尝试了什么吗?这是问题的一部分。谢谢您的提问。以及您尝试的输出吗?您能告诉我们您尝试了什么吗?这是问题的一部分。谢谢您的提问。以及您尝试的输出吗?非常感谢!我正在尝试将代码用于for循环,但图像没有显示。您知道我在做什么吗可能做错了?我将“n”设置为用户输入的数字。@IreneCastañeda:你能用你的循环代码更新问题吗?@IreneCastañeda:查看更新的答案。你忘了调用函数。非常感谢!我正试图将代码与for循环一起使用,但图像没有显示。你知道我可能做错了什么吗?我将“n”设置为相等到用户输入号码。@IreneCastañeda:您能用循环码更新问题吗?@IreneCastañeda:请参阅更新的答案。您忘记调用函数了。