CodingForums.com

CodingForums.com (http://www.codingforums.com/index.php)
-   Python (http://www.codingforums.com/forumdisplay.php?f=46)
-   -   Warning: integer argument expected, got float (http://www.codingforums.com/showthread.php?t=246942)

KevinJohnson 12-22-2011 05:22 PM

Warning: integer argument expected, got float
 
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):


Code:

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 08:17 PM

notch[x] is not guaranteed to be an integer. You may want to do: int(round(notch[x]))

Edit: 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 04:42 AM

Quote:

Originally Posted by Apothem (Post 1173313)
notch[x] is not guaranteed to be an integer. You may want to do: int(round(notch[x]))

Edit: 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 03: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 12: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 10:35 AM

Quote:

Originally Posted by Samhain13 (Post 1173942)
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.


All times are GMT +1. The time now is 03:48 AM.

Powered by vBulletin®
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.