1. 程式人生 > >用初中代數結合python畫出正方形

用初中代數結合python畫出正方形

在螢幕上列印類似下面的圖形:

常規畫正方形的演算法:

  這幾乎是初學所有計算機語言時都會遇到的問題。演算法都大致類似,就是找出列印規律然後用計算機語句表達出來。最常規的演算法是:輸入數字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 wrap
for 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()

  執行結果:

 

  還可以通過座標軸直線的平移、翻轉等定律繪製出更多的圖形。用數學的方式來解決演算法問題會讓問題變得更簡單有趣。