【发布时间】:2015-07-31 07:53:39
【问题描述】:
我们有一个包含 10 个坐标点的列表。 x 和 y 如下:
注意:这里我们在不使用 numpy.array 的情况下遍历 x、y 和 br 的列表,因为在遥远的将来,我会将其复制到 Fortran77 中。
x = [7., -6., 7., -7., 8., 9., 5., 4., -5., 0.]
for i, x[i] in enumerate(x):
print 'The values of x =', x[i]
y = [3., 6., 3., 9., 1., 9., -2., 0., 3., 7.]
for i, y[i] in enumerate(y):
print 'The values of y =', y[i]
br = [1., 2., 8., 0., 7., 9., 6., 9., 7., 4.]
for i, br[i] in enumerate(br):
print 'brightness = ',br[i]
注意:rad_cut 是圆的半径 (r^2 = x^2 + y^2) rad_cut = input("请提供rad_cut的值:")
br_total = 0
for i in xrange(0,10):
if x[i]**0.5 + y[i]**0.5 < rad_cut:
br_total += br[i]
print 'The total brightness = ', br_total
我遇到的问题如下:
in <module>
if x[i]**0.5 + y[i]**0.5 < rad_cut:
ValueError: negative number cannot be raised to a fractional power
如果有人能帮我解决这个问题,我将不胜感激。由于可迭代列表中的负数x[i+0j]**0.5 + y[i+0j]**0.5 < rad_cut:,我尝试使用复数
但它没有用。
【问题讨论】:
-
你当然应该做
if (x[i]**2 + y[i]**2)**0.5 < rad_cut?或者更有效的是,rad_sq = rad_cut**2...if (x[i]**2 + y[i]**2) < rad_sq。 -
@skyking:你是对的。谢谢,我的程序现在可以运行了!
-
@Arvind.R 错误源于数学问题。与自身相乘的数字永远不会产生负数(即两个负数相乘成为正数),因此负数的平方根在技术上是不可能的。
** 0.5本质上就是平方根,导致这个 ValueError。
标签: python arrays negative-number