[英]ValueError: negative number cannot be raised to a fractional power in iterable list - Python
我們列出了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:
但這沒有用。
如注釋中所述,您需要對那些x和y值求平方,而不是求其平方根。
這是編寫程序的更Python化方法。 此代碼將在Python 2.6及更高版本上運行,也將在Python 3上正常運行。
主要變化是它在sum()
函數內部使用了一個生成器表達式來添加適當的br
值。
#!/usr/bin/env python
from __future__ import print_function
x = [7., -6., 7., -7., 8., 9., 5., 4., -5., 0.]
y = [3., 6., 3., 9., 1., 9., -2., 0., 3., 7.]
br = [1., 2., 8., 0., 7., 9., 6., 9., 7., 4.]
print(' x y br')
for i, (xi, yi, bri) in enumerate(zip(x, y, br)):
print('{0}: {1:4.1f} {2:4.1f} {3:4.1f}'.format(i, xi, yi, bri))
rad_cut = input("Please provide a value of rad_cut: ")
rad_cut = float(rad_cut)
rad_sq = rad_cut ** 2
br_total = sum(bri for xi, yi, bri in zip(x, y, br)
if xi**2 + yi**2 < rad_sq)
print('The total brightness = {0:.1f}'.format(br_total))
典型輸出
x y br
0: 7.0 3.0 1.0
1: -6.0 6.0 2.0
2: 7.0 3.0 8.0
3: -7.0 9.0 0.0
4: 8.0 1.0 7.0
5: 9.0 9.0 9.0
6: 5.0 -2.0 6.0
7: 4.0 0.0 9.0
8: -5.0 3.0 7.0
9: 0.0 7.0 4.0
Please provide a value of rad_cut: 10
The total brightness = 44.0
注意:在Python 2中最好使用raw_input()
而不是input()
,因為Python 2版本的input()
對輸入的數據使用有潛在危險的eval()
函數 。 input()
的Python 3版本與Python 2的raw_input()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.