控制台在中间打印一个带有旋转方形的缩放方块

时间:2015-04-02 02:07:52

标签: python python-3.x

我真的不确定如何在标题中解释我的问题;图形将是最好的。

我已经把这个问题作为在课堂上玩的东西,到目前为止只有一个人设法实现了解决方案,而且这是一个非常复杂的解决方案。 虽然我和他说过(我们能管理的最好,他的英语不是很好),但我想提出自己的解决方案,但我需要一些指示,或者至少是新想法......

问题在于:

n=5
0 3 5 5 3 0
3 5     5 3
5         5
5         5
3 5     5 3
0 3 5 5 3 0

'n'是输入值。

到目前为止,我已经拥有了这个;

#!/usr/bin/env python3
while True:
    n = int(input("Enter a size : "))
    z = "+"

    for i in range(n*2): # ROWS
        for j in range(n*2): # COLUMNS
            if i == 0 or j == 0 or i == n*2 - 1 or j == n*2 - 1: # OUTLINE
                    print(z, end=" ")
            elif j < n-i: # TOP LEFT
                    print(z, end=" ")
            elif j >= n+i or i >= n+j: # TOP RIGHT + BOTTOM LEFT
                    print(z, end=" ")
            elif j >= n*2-i+n-1 and i >= n*2-j+n-1: # BOTTOM RIGHT
                    print(z, end=" ")
            else:
                print(" ", end=" ")
        print()

Whitch输出此内容;

Enter a size : 5
+ + + + + + + + + + 
+ + + +     + + + + 
+ + +         + + + 
+ +             + + 
+                 + 
+                 + 
+ +             + + 
+ + +         + + + 
+ + + +     + + + + 
+ + + + + + + + + + 

下一步是将“z”替换为我猜的方框中的位置等式。但我不知道从哪里开始(我的数学有点生疏)

2 个答案:

答案 0 :(得分:0)

猜测一下,我想这就是你的意思:

def square(n):
    def row(i, n):
        l = [str(x) if x <= n else ' ' for x in range(i, i+n)]
        return l + l[::-1]
    top = [row(i, n) for i in range(1, n+1)]
    return '\n'.join(' '.join(r) for r in (top + top[::-1]))

while True:
    n = int(input("> "))
    print(square(n))

答案 1 :(得分:0)

我解决了它,而不是我期待的方式,tbh。我称之为肮脏的黑客。

#!/usr/bin/env python
__author__ = "Luke Jones"
__copyright__ = "Copyleft, do what you want with it"
__license__ = "GPL"
__version__ = "0.0.1"

while True:
    startV = int(input("Enter a size : "))
    array1=[]
    array2=[]
    for i in range(1,startV+1,2):
        array1.append(i)
    array2 = list(array1)
    array2.reverse()
    n = len(array1)

    for i in range(n*2): # ROWS
        for j in range(n*2): # COLUMNS
            if j < n-i: # TOP LEFT
                print(array1[j+i], end=" ")

            elif j >= n+i: # TOP RIGHT
                print(array2[j-n-i], end=" ")

            elif i >= n+j: # BOTTOM LEFT
                print(array2[i-n-j], end=" ")

            elif i >= n*2-j+n-1 and not i >= n*2-j+n:
                #print("X",end=" ")
                for q in range(n*2-j):
                    print(array2[q], end=" ")
            else:
                print(" ", end=" ")
        print()