PDA

View Full Version : Warning: integer argument expected, got float

KevinJohnson
12-22-2011, 06:22 PM
i'm getting the following error when trying to divide by numbers inside of a list. I'm a little new to Python, and i was wondering how i can fix this problem.

sphere.py:23: Deprecation Warning: integer argument expected, got float
for y in range(notch[x] / 360):

import math

## Generate a Sphere in 3d Space
def sphere(r, lx, ly, lz):
for i in range(0,360):
lx.append(math.cos(i) * r)
ly.append(math.sin(i) * r)
lz.append(math.cos(i) * r)

## Generate a list of possible Lock positions
def GenPositions(NotchList, n):
notch = []
a1 = 180
r = .5
# Generate a List of Smallest Slice angles
for i in range(n):
notch.append(a1 * (r ** (i-1)))

# Generate a final list of Notches
for x in range(1,len(notch)):
for y in range(notch[x] / 360):
NotchList.append(notch[x] * y)

# Test - Generate sphere coordinates
lx = []
ly = []
lz = []
tmp = sphere(10, lx, ly, lz)
for i in range(len(lx)):
print lx[i], ly[i], lz[i]

print
print "There are " + str(len(lx)) + " vertices"

# Test - Generate Lock positions

NotchList = []
tmp = GenPositions(NotchList, 64)

for i in range(1,len(NotchList)):
print i, NotchList[i]

Apothem
12-22-2011, 09:17 PM
notch[x] is not guaranteed to be an integer. You may want to do: int(round(notch[x]))

It is not guaranteed to be an integer because you are assigning it a value that makes use of r, which is a float. Range requires an integer to generate a number from 0 to that number-1.

KevinJohnson
12-23-2011, 05:42 AM
notch[x] is not guaranteed to be an integer. You may want to do: int(round(notch[x]))

It is not guaranteed to be an integer because you are assigning it a value that makes use of r, which is a float. Range requires an integer to generate a number from 0 to that number-1.

The problem is that 360 will always be divided by a float, and i need to store the result in a resultant list somewhere for later manipulation..... how exactly do i do that?

Or...should i use a different kind of loop structure?

Apothem
12-23-2011, 04:49 PM
Well again int(round(notch[x])). It doesn't assign the rounded number, it just converts it for usage.

Samhain13
12-25-2011, 01:14 AM
notch[x]/360 is likely going to be a float anyway, regardless of whether notch[x] were rounded. And the problem is, range simply doesn't want floats; hence, the Deprecation Warning.

I believe "a different kind of loop structure" is truly in order.

KevinJohnson
02-27-2012, 11:35 AM
notch[x]/360 is likely going to be a float anyway, regardless of whether notch[x] were rounded. And the problem is, range simply doesn't want floats; hence, the Deprecation Warning.

I believe "a different kind of loop structure" is truly in order.

You're right. What's needed is a "While... loop" structure.

i think it's ok, learning any new language has it's ins and outs. i'm learning them as i go.