[Tutor] Python-list thread: int vs. float
boB Stepp
robertvstepp at gmail.com
Fri Feb 10 20:59:04 EST 2017
I have been following the thread "int vs. float"
(https://mail.python.org/pipermail/python-list/2017-February/719287.html)
on the main list. A search for the OP on the Tutor archive came up
negative, so I am hoping he is not following Tutor tonight (Or anytime
prior to the due date for his homework!). The central part of
adam14711993's question is:
"What I cannot figure out is how to write it so that if my user input
is, for example, 1.5, the program will result with: Sorry, you can
only order whole packages.
"I understand that because I am starting out by assigning my
number_purchases_str to be an int, when the user enters a float that
is a conflict and will crash."
He cannot figure out how to reliably tell if the user's input is an
integer, float or neither. So I thought I would come up with my
solution, which currently is:
py3: def ck_input():
... value_to_ck = input('Enter a number:')
... try:
... value = int(value_to_ck)
... print('You have entered an integer.')
... except ValueError:
... try:
... value = float(value_to_ck)
... print('You have entered a float.')
... except ValueError:
... print('You have failed to enter a numerical value.')
...
(Yes, I know I am not doing anything with the variable, "value", but
if I were to actually implement this in the future, I am sure I would
find a use for it. So I left it as is for the moment.)
My quick checks are:
py3: ck_input()
Enter a number:5
You have entered an integer.
py3: ck_input()
Enter a number:5.0
You have entered a float.
py3: ck_input()
Enter a number:'5'
You have failed to enter a numerical value.
This is all well and good. I am not trying to elicit an "Atta boy,
boB!" here. ~(:>)) Instead, I am wondering if there is something in
Python's wonderful cornucopia of programming stuff that can simplify
this type of check. As you might guess from my earlier post this
evening, I have been playing around with "type()" and "isinstance()",
but if I try something like:
py3: isinstance(int('5.0'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
I get the ValueError I make use of in my function above.
So, is there any easier way to do this check? If not, can my function
be improved to make it a bit less lengthy, but still eminently
readable?
TIA!
--
boB
More information about the Tutor
mailing list