Python运动与矩阵中的正弦函数

时间:2015-05-05 21:46:08

标签: python python-2.7

所以我前一段时间接受了这个练习,但问题告诉我,它永远无法解决。这是:

  1. 编写一个名为print_sine_wave(m,n)的函数,该函数在具有n行和m列的矩阵上仅使用星号绘制半个正弦函数。例如,print_sine_wave(17,11)会产生

     *          
          *
              *
                 *
                    *
                     * 
                    *
                 *
              *
          *
     *          
    
  2. 我尝试过不同的方法,但没有一种方法可以完全按照这个结果绘制(用空格和星号)。我使用的是Python 2.7。任何帮助将不胜感激!

    提前致谢。

2 个答案:

答案 0 :(得分:0)

这样的事情:

from math import sin, pi

def print_sine_wave(lines, columns):
    for pos_x in range(lines+1):
        x = float(pos_x - float(lines) / 2) / (float(lines) / 2) + .5
        pos_y = int(sin(x * pi) * columns + .5) + columns
        print ('%4.1f' % x) + ' ' * pos_y + '*'


print_sine_wave(20, 30)

导致:

-0.5 *
-0.4  *
-0.3       *
-0.2             *
-0.1                      *
 0.0                              *
 0.1                                       *
 0.2                                                *
 0.3                                                      *
 0.4                                                           *
 0.5                                                            *
 0.6                                                           *
 0.7                                                      *
 0.8                                                *
 0.9                                       *
 1.0                              *
 1.1                      *
 1.2             *
 1.3       *
 1.4  *
 1.5 *

答案 1 :(得分:0)

不同的舍入可能会导致白色空间差异。考虑:

  1. 您的功能间隔。为了获得完美的曲线,第一行需要表示sin(0),最后一行需要表示sin(1)。这是一个非常容易犯的错误(使用我的例子)sin(pi * j / n),这意味着j永远不会到达i而离开你的最后一行只是达不到pi。
  2. 你的功能的幅度。我在int上致电float,向下舍入。使用内置的round函数(或math.floor)完全有效。 round将返回仍然需要转换为int的浮点数。
  3. 这是我的例子,涵盖0到pi的间隔(给出半波长):

    from math import sin, pi
    
    def print_sine_wave(m, n):
        for j in range(n):
            print(' ' * int(m * sin(pi * j / (n - 1))) + '*')
    
    print_sine_wave(17, 11)
    

    导致:

    *
         *
             *
                 *
                    *
                     *
                    *
                 *
             *
         *
    *