在屏幕上打印类似下面的图形:
常规画正方形的算法:
这几乎是初学所有计算机语言时都会遇到的问题。算法都大致类似,就是找出打印规律然后用计算机语句表达出来。最常规的算法是:输入数字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()
执行结果:
还可以通过坐标轴直线的平移、翻转等定律绘制出更多的图形。用数学的方式来解决算法问题会让问题变得更简单有趣。