用初中代數結合python畫出正方形
阿新 • • 發佈:2018-12-29
在螢幕上列印類似下面的圖形:
常規畫正方形的演算法:
這幾乎是初學所有計算機語言時都會遇到的問題。演算法都大致類似,就是找出列印規律然後用計算機語句表達出來。最常規的演算法是:輸入數字n就列印n行,首行和尾行列印n個*號,其它行中列印收尾*號,其他位置列印空格。實現如下:
s=int(input("num:")) for i in range(s): #Count.Record how many times you enter. if i == 0 or i == s-1: #If i is 0 or you enter minus 1,print '*' in all line and without wrapfor i in range(s): print('*',end='') print('') else: print('*',end='') #先列印第一個* for i in range(s-2): #迴圈列印空格 print(' ',end='') print('*') #列印最後的*
用初中代數的演算法來解決:
初中代數課時老師在黑板上畫的最多的就是橫縱座標軸了,橫軸通常表示為x軸,縱軸通常表示為y軸,如下圖:
而在這個問題中螢幕列印空間也可以抽象為一個座標軸,因為列印順序是從上往下,從左自右的,所以在這個列印空間中的座標軸將與代數中的座標軸有所翻轉:
根據這個方法並給出範圍我們就能很容易的畫出一條x=y的直線:
s=int(input("num:")) for y in range(s): #Count.Record how many times you enter. for x in range(s): #x,y相當於是定義列印空間 if y==x: #滿足此條件的時列印*號 print("*",end='') else: print(" ",end='') print()
執行結果:
這樣,一條斜線就打印出來了,下面思考:正方形其實就是由四條直線圍成的,分別是:x=n、y=n、x=0、y=0:
將這些條件寫入if語句:
s=int(input("num:")) for y in range(s): #Count.Record how many times you enter. for x in range(s): if y==0 or x==0 or y==s-1 or x==s-1: #類似於在二維座標軸上用4條直線繪製出正方形 print("*",end='') else: print(" ",end='') print()
執行結果:
用代數的演算法還能畫出很多圖形,如等腰三角形:
s=int(input("num:")) for y in range(s): for x in range(s): if y==2*x-s+1 or y==-2*x+s-1 or y==s-1: print("*",end='') else: print(" ",end="") print()
執行結果:
還可以通過座標軸直線的平移、翻轉等定律繪製出更多的圖形。用數學的方式來解決演算法問題會讓問題變得更簡單有趣。