用初中代数结合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()

  执行结果:

  还可以通过坐标轴直线的平移、翻转等定律绘制出更多的图形。用数学的方式来解决算法问题会让问题变得更简单有趣。

猜你喜欢

转载自www.cnblogs.com/readygood/p/10196266.html