2015-04-02 46 views
0

我真的不確定如何在標題中解釋我的問題;圖形將是最好的。控制檯在中間打印一個縮放方塊

我已經把這個問題當作了在課堂上玩耍的東西,到目前爲止只有一個人設法實現了一個解決方案,而且這是一個非常複雜的問題。 雖然我已經和他說過了(我們可以管理的最好的,他的英語不是很好),但我想提出自己的解決方案,但是我需要一些指導,或者至少有新的想法..

問題是這樣的:

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 output this;

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

下一步是用我猜測的方框中的位置替換「z」。但我不知道從哪裏開始(而我的數學是有點生疏)

+0

您的示例和輸出對於'n = 5'的輸入不一致。這對Stack Overflow來說也不太適合。你到目前爲止嘗試了什麼(替換'z')?數字遵循什麼樣的模式? – grovesNL 2015-04-02 02:29:19

+0

對不起,我不確定在哪裏問。我知道例子不匹配。 – 2015-04-02 03:22:44

回答

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() 
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)) 
+0

謝謝,這是一個有趣的做法。 我不會想到在列表中使用函數。我也不會想到使用嵌套函數。 – 2015-04-02 21:55:07

+0

如果這解決了您的問題,請將此答案標記爲已接受 – Finwood 2015-04-02 22:18:49