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

      执行结果:

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

  • 相关阅读:
    第一次讲课
    请允许我悄悄的爱你一次好吗 zz
    装.NET实在是一种折磨,
    第一次听课
    路,在何方?
    UNION和UNION ALL 的区别
    利用jquery操作select下拉列表框
    理解 collate Chinese_PRC_CI_AS
    sql 中 case when 实例
    sql 中 case when 实例(2)
  • 原文地址:https://www.cnblogs.com/readygood/p/10196266.html
Copyright © 2020-2023  润新知