Reputation: 105
I'm very much a Python newbie, but I've searched for a solution and I'm stumped.
I have defined a function which accepts several arguments:
def func(arg1, arg2, arg3):
The first argument will be a string but the next two are always going to be integers. I need to construct the following for
loop.
for x in range(0, arg2 / 2):
The problem is that arg2
is defaulting to type float
and as a result I get the following:
TypeError: 'float' object cannot be interpreted as an integer
I have tried:
for x in range(0, int(arg2) / 2):
But the same thing happens for some reason. How can I specify that arg2
should be taken as an integer, or how can I reinterpret it as an integer?
Upvotes: 0
Views: 233
Reputation: 4991
In Python 3.x:
When you arg2 / 2
you will get a float. If you want an int try arg2 // 2
For example 2 / 2 = 1.0
but 2 // 2 = 1
But you will lose accuracy doing this, but since you want an int I'm assuming you want to round up or down anyways.
In python 2.x / is an int division by default; to get a float division, you had to make sure one of the number was a float.
Edited:
As @martineau pointed out, in both Python 2.x and 3.x if the numerator or denominator is a float, / will do float division and // will result in a float result. To get around this cast it to int or make sure it's an int...
2.0 / 2 = 1.0
and 2.0 // 2 = 1.0
and 2 / 2.0 = 1.0
and 2 // 2.0 = 1.0
2.5 / 2 = 1.25
and 2.0 // 2 = 1.0
and 2 / 2.5 = 0.8
and 2 // 2.5 = 0.0
Upvotes: 3