ValueError: negative number cannot be raised to a fractional power in iterable list - Python
Question: We have a list of 10 points of coord. x and y as follow:

NOTE: Here we iterate through the lists of x,y and br without using
numpy.array because in the far future, I will replicate this into 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]
    

NOTE: rad_cut is the radius of the circle (r^2 = x^2 + y^2) rad_cut =
input("Please provide a value of 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
    

The issue I have having is as follows:

    
    
     in <module>
        if x[i]**0.5 + y[i]**0.5 < rad_cut:
    ValueError: negative number cannot be raised to a fractional power
    

I would appreciate if anyone can lend me a hand to resolve this issue. I have
tried to use complex numbers because of the negative number in the iterable
lists `x[i+0j]**0.5 + y[i+0j]**0.5 < rad_cut:` but it didn't work.


Answer: As noted in the comments you need to square those x & y values, rather than
taking their square roots.

Here's a more Pythonic way to write your program. This code will work on
Python 2.6 and up, it will also work properly on Python 3.

The main change is that it uses a [generator
expression](https://docs.python.org/2/tutorial/classes.html#generator-
expressions) inside the `sum()` function to add the appropriate `br` values.

    
    
    #!/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))
    

**typical output**

    
    
          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
    

Note: It's better in Python 2 to use `raw_input()` rather than `input()`,
since the Python 2 version of `input()` uses the potentially [dangerous
`eval()`
function](http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html)
on the entered data; the Python 3 version of `input()` is identical to Python
2's `raw_input()`.

