用初中代數結合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()

  執行結果:

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章