所以我前一段时间接受了这个练习,但问题告诉我,它永远无法解决。这是:
编写一个名为print_sine_wave(m,n)
的函数,该函数在具有n行和m列的矩阵上仅使用星号绘制半个正弦函数。例如,print_sine_wave(17,11)
会产生
*
*
*
*
*
*
*
*
*
*
*
我尝试过不同的方法,但没有一种方法可以完全按照这个结果绘制(用空格和星号)。我使用的是Python 2.7。任何帮助将不胜感激!
提前致谢。
答案 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)
不同的舍入可能会导致白色空间差异。考虑:
sin(pi * j / n)
,这意味着j
永远不会到达i
而离开你的最后一行只是达不到pi。int
上致电float
,向下舍入。使用内置的round函数(或math.floor
)完全有效。 round
将返回仍然需要转换为int
的浮点数。这是我的例子,涵盖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)
导致:
*
*
*
*
*
*
*
*
*
*
*