簡體   English   中英

ValueError:負數不能在可迭代列表中提升為小數-Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM