2013-03-20 57 views
2

我想使用python循環制作一個ASCII圖。 目標是讓用戶輸入一個輸入(公式)[x + 1]等並打印出圖形。 圖形的域和範圍僅從-10到+10。試圖使ASCII圖python 3

我設法讓它工作,但只對公式(-x + 1),這是(x + 1)在我的代碼。

我知道這個問題是因爲我的循環從頂部開始打印,所以我纔會有那麼它打印在負向循環改變它,但我停留在如何將自己的圖形組合成一個嵌套循環所以它正確地打印出來,然後替換功能輸出的相應位置。

我現在在想,也許我應該把它打印出'*'行然後圍繞它的圖形,但我認爲這更復雜。

我可以給你任何更多的信息,如果你需要。

任何建設性的想法將不勝感激。

這是我的代碼,讓我知道你在想什麼。

height=20 
w=10 
x=0 
for a in range(0,11): 
    ps= ((" " * w)+('|')+(" " * w)) 
    ps=list(ps) 
    ps[x]="*" 
    x=x+1 
    pp="".join(ps) 
    print(pp) 



rs=(('-'*10)+('+')+('-'*10)) 
rs=list(rs) 
rs[x]="*" 
rr="".join(rs) 
print(rr) 

for a in range(0,10): 
    ws = ((" " * w)+('|')+(" " * w)) 
    ws=list(ws) 
    y=x+1 
    ws[y]="*" 
    x=x+1 
    wp="".join(ws) 
    print(wp) 

這是下面的輸出:

*   |   
*  |   
    *  |   
    *  |   
    *  |   
    * |   
     * |   
     * |   
     * |   
     *|   
      *   
----------+*--------- 
      | *   
      | *  
      | *  
      | *  
      |  *  
      |  * 
      |  * 
      |  * 
      |   * 

回答

0

這裏是解決該問題的另一種方法:

  1. 創建一個二維數組,每一個元素是一個字符
  2. 預 - 填充背景圖線
  3. 循環遍歷每個x位置,並計算出rou nded y位置
  4. 插入位置爲*到您的二維數組
  5. 最後打印出整個二維數組爲一組線

對於5,這裏是Python代碼方便的片斷 - ''.join(myArray)

您會注意到,這種解決方法將實際輸出與數據結果應該是什麼分開計算。這通常是在一個簡單的程序分開你的邏輯的好方法:

  1. 處理,濾波,sanatize和組織你的程序的輸入數據
  2. 輸入DO數據處理
  3. 制定,格式和輸出處理後的數據

如果您按照這三個常規/'元'步驟來組織您的程序,它可以幫助更多地組織您的代碼並使其更容易理解。

+0

我想補充一點,如果最終目標是繪製任何函數,那麼他將不得不首先計算最小值和最大值,因爲數組的維數取決於這些值。另外,我不確定''.join(myArray)是否適用於二維數組。 – civilu 2013-03-20 14:25:25

+0

@civilu你會爲2D數組的每一行做到這一點,而不是陣列本身。 – Ivo 2013-03-20 15:14:12

+0

能否請您詳細介紹一下這一點? 我需要用20行製作一個數組嗎?或者只是正在使用的4個字符? 我將如何循環通過每個x位置來計算y?那是嵌套循環? – gunter 2013-03-20 15:53:18