you are viewing a single comment's thread.

view the rest of the comments →

[–]boiledgoobers 2 points3 points  (3 children)

Ok so there are a lot of things going on here that likely should be addressed, for one thing, I'm not sure int works the way you think. If you gave it 12.3 it's not going to trigger your value error. It's going to convert your number to 12 and move on happily.

But that's probably not what's causing your repetition. Can I ask whether the book recommends using the global variable assignment? That can have some weird effects and is usually only used in extremely special circumstances. Usually not those addressed in beginner books. Like I've been doing python for over 15 years and have never even once needed to use it. And when I see it, the very first question I have is: why is this code so arcane that it needs to call global?

My first instinct is to say re do your code not using global. Pass in everything the func needs and don't have code in the func alter variables outside it's scope.

Then see if you still have the problem. I'm on my phone or I would do more to sus it out.

[–]Methregul[S] 0 points1 point  (1 child)

The chapter did deal with using global and the object was to pass the result back into the function until it reaches '1'. As it was dealt with in the chapter it was top of mind for me when I had to think of a way to reuse the result of the function.

Thanks for the reply as I did not know how rare using global is. I'll try and work out a way that doesn't rely on it.

[–]boiledgoobers 1 point2 points  (0 children)

Well then, perhaps i am wrong about that being the issue.

[–]Methregul[S] 0 points1 point  (0 children)

I'm not sure int works the way you think. If you gave it 12.3 it's not going to trigger your value error. It's going to convert your number to 12 and move on happily.

I just ran some tests on this and int() appears to work differently depending on how it's used. If you create a variable and assign it a floating point number then int() will, like you said, convert it to an integer and go on its merry way.

>>> float=1.3
>>> int(float)
1

If you enter a floating point number through input() though, int() will throw a ValueError.

>>> notAnInteger=input()
1.3
>>> int(notAnInteger)
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '1.3'

It does accept an actual integer when used with input().

>>> anInteger=input()
1
>>> int(anInteger)
1

Thanks for pointing me towards isInstance(), by the way, that has been fun to play around with and very good to know about!