在python中打印菱形

时间:2018-08-31 12:03:22

标签: python

我必须打印j个相邻的菱形 也就是说,如果i = 3且j = 2,则输出应类似于

  *      *
 * *    * *
* * *  * * *
 * *    * *
  *      *

我已经用python编写了一个程序来解决这个问题,但是我将输出一个接一个地递了下来。任何人都可以帮忙吗?

i,j=map(int,input().split())

def solve(a,b):
    for i in range(a,b):
        print((" "*abs(b))+("* "*abs(i)))
        b-=1
for k in range(0,j):
    solve(0,i),solve(-i,0)

2 个答案:

答案 0 :(得分:0)

我认为这对您有用。我试图使其与您自己的代码相似,以便您理解。

让我知道您是否需要任何修改

i,j=map(int,input().split())
size = i
def solve(a,b):
    for i in range(a,b):
        spaces =[]
        stars = []
        spaces = list(" " * abs(b))
        stars = list("* " * abs(i))

        final = spaces + stars

        #padding
        while len(final) < ((size*2)-1):
            final.append(" ")

        # popping last space to preserve pattern
        if len(final) == (size * 2):
            final.pop()

        b-=1
        print("".join(final) * j)


for k in range(0,1):
    solve(0,i)
    solve(-i,0)

输出:

5 5

    *        *        *        *        *    
   * *      * *      * *      * *      * *   
  * * *    * * *    * * *    * * *    * * *  
 * * * *  * * * *  * * * *  * * * *  * * * * 
* * * * ** * * * ** * * * ** * * * ** * * * *
 * * * *  * * * *  * * * *  * * * *  * * * * 
  * * *    * * *    * * *    * * *    * * *  
   * *      * *      * *      * *      * *   
    *        *        *        *        *  

答案 1 :(得分:0)

有时候,复制数据比重新创建数据更容易。此外,这可以在菱形之间提供适当的间距。

i, j = map(int, input().split())

# Create the top half
lines = [];
for lineIndex in range(i):
    lines.append('')

    lines[lineIndex] = ' ' * (i - lineIndex) + '*'
    for idx in range(lineIndex):
        lines[lineIndex] += ' *'
    lines[lineIndex] += ' ' * (i - lineIndex)

# Copy the first lines onto the end in reverse order
for idx in range(i - 2, -1, -1):
    lines.append(lines[idx])

# Create the correct number of rhombuses
for idx in range(len(lines)):
    lines[idx] *= j
    lines[idx] = lines[idx][:-1]

for line in lines:
    print(line)

输出:

4 6
   *        *        *        *        *        *
  * *      * *      * *      * *      * *      * *
 * * *    * * *    * * *    * * *    * * *    * * *
* * * *  * * * *  * * * *  * * * *  * * * *  * * * *
 * * *    * * *    * * *    * * *    * * *    * * *
  * *      * *      * *      * *      * *      * *
   *        *        *        *        *        *

如果您正在寻找更接近开始的解决方案,则以下内容也应适用。请注意,传递到end=''语句中的print参数将print打印的结束字符从换行符更改为空,从而允许您将所有菱形都打印在一行上。

i,j=map(int,input().split())

def solve(a,b):
    for k in range(a,b):
        print(((' '*abs(b))+('* '*abs(k))+(' '*abs(b))) * j, end='')
        b-=1
        print()
solve(0,i)
solve(-i,0)