which is the best way to check if a string is an number or a char?
could the 2nd example be very expensive timewise if i have to check a
lot of strings?
this
value = raw_input()
try:
value = int(value)
except ValueError:
print "value is not an integer"
or:
c=raw_input("yo: ")
if c in '0123456789':
print "integer"
else:
print "char"
or some other way? 16 14556 sk*******@yahoo.se wrote:
>which is the best way to check if a string is an number or a char? could the 2nd example be very expensive timewise if i have to check a lot of strings?
this
value = raw_input()
try:
value = int(value) except ValueError:
print "value is not an integer"
or:
c=raw_input("yo: ") if c in '0123456789':
print "integer" else:
print "char" or some other way?
I always do it the first way. It is simpler, and should be faster. Also,
the second way will only work on single-digit numbers (you would have to
iterate over the entire string with a for loop to use it on numbers with
more than one digit).
On Apr 5, 6:19*pm, skanem...@yahoo.se wrote:
which is the best way to check if a string is an number or a char?
could the 2nd example be very expensive timewise if i have to check a
lot of strings?
You might be interested in str.isdigit:
>>print str.isdigit.__doc__
S.isdigit() -bool
Return True if all characters in S are digits
and there is at least one character in S, False otherwise.
Mark
On Apr 6, 9:25 am, Mark Dickinson <dicki...@gmail.comwrote:
On Apr 5, 6:19 pm, skanem...@yahoo.se wrote:
which is the best way to check if a string is an number or a char?
could the 2nd example be very expensive timewise if i have to check a
lot of strings?
You might be interested in str.isdigit:
>print str.isdigit.__doc__
S.isdigit() -bool
Return True if all characters in S are digits
and there is at least one character in S, False otherwise.
This doesn't cater for negative integers.
I always do it the first way. It is simpler, and should be faster.
Ditto. Using int() is best. It's clear, it's correct, and it
should be as fast as it gets.
>if c in '0123456789': print "integer" else: print "char"
Also, the second way will only work on single-digit numbers
(you would have to iterate over the entire string with a for
loop to use it on numbers with more than one digit).
It also catches things like c="1234" but misses negative numbers
too. It's a bad solution on a number of levels. The isdigit()
method of a string does much of what int() does for testing "is
this an int" except that it too misses negative numbers.
-tkc
John Machin wrote:
On Apr 6, 9:25 am, Mark Dickinson <dicki...@gmail.comwrote:
>On Apr 5, 6:19 pm, skanem...@yahoo.se wrote:
>>which is the best way to check if a string is an number or a char? could the 2nd example be very expensive timewise if i have to check a lot of strings?
You might be interested in str.isdigit:
>>>>print str.isdigit.__doc__
S.isdigit() -bool
Return True if all characters in S are digits and there is at least one character in S, False otherwise.
This doesn't cater for negative integers.
No, it doesn't, but
s.isdigit() or (s[0] in "+-" and s[1:].isdigit) # untested
does. and *may* be quicker than other examples. Not that speed is
usually a concern in validation routines anyway ...
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
John Machin wrote:
On Apr 6, 9:25 am, Mark Dickinson <dicki...@gmail.comwrote:
>On Apr 5, 6:19 pm, skanem...@yahoo.se wrote:
>>which is the best way to check if a string is an number or a char? could the 2nd example be very expensive timewise if i have to check a lot of strings?
You might be interested in str.isdigit:
>>>>print str.isdigit.__doc__
S.isdigit() -bool
Return True if all characters in S are digits and there is at least one character in S, False otherwise.
This doesn't cater for negative integers.
No, it doesn't, but
s.isdigit() or (s[0] in "+-" and s[1:].isdigit) # untested
does. and *may* be quicker than other examples. Not that speed is
usually a concern in validation routines anyway ...
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
In article <ma**************************************@python.o rg>,
Steve Holden <st***@holdenweb.comwrote:
This doesn't cater for negative integers.
No, it doesn't, but
s.isdigit() or (s[0] in "+-" and s[1:].isdigit) # untested
does.
I think this fails on " -1". So, then you start doing
s.strip().isdigit(), and then somebody else comes up with some other
unexpected corner case...
int(s) and catching any exception thrown just sounds like the best way.
On Apr 6, 10:23 am, Roy Smith <r...@panix.comwrote:
In article <mailman.2927.1207447793.9267.python-l...@python.org>,
Steve Holden <st...@holdenweb.comwrote:
This doesn't cater for negative integers.
No, it doesn't, but
s.isdigit() or (s[0] in "+-" and s[1:].isdigit) # untested
does.
I think this fails on " -1". So, then you start doing
s.strip().isdigit(), and then somebody else comes up with some other
unexpected corner case...
int(s) and catching any exception thrown just sounds like the best way.
Another corner case: Is "5.0" an integer or treated as one?
regards,
ernie
On Apr 6, 5:18 am, ernie <ernesto.ado...@gmail.comwrote:
On Apr 6, 10:23 am, Roy Smith <r...@panix.comwrote:
In article <mailman.2927.1207447793.9267.python-l...@python.org>,
Steve Holden <st...@holdenweb.comwrote:
This doesn't cater for negative integers.
No, it doesn't, but
s.isdigit() or (s[0] in "+-" and s[1:].isdigit) # untested
does.
I think this fails on " -1". So, then you start doing
s.strip().isdigit(), and then somebody else comes up with some other
unexpected corner case...
int(s) and catching any exception thrown just sounds like the best way.
Another corner case: Is "5.0" an integer or treated as one?
regards,
ernie
In Python, 5.0 is a float "5.0" is a string, and you need to make your
mind up about what type you want "5.0" to be represented as in your
program and code accordingly.
- Paddy.
On Sat, 5 Apr 2008 22:02:10 -0700 (PDT), Paddy <pa*******@googlemail.comwrote:
On Apr 6, 5:18 am, ernie <ernesto.ado...@gmail.comwrote:
>On Apr 6, 10:23 am, Roy Smith <r...@panix.comwrote:
int(s) and catching any exception thrown just sounds like the best way.
Another corner case: Is "5.0" an integer or treated as one?
In Python, 5.0 is a float "5.0" is a string, and you need to make your
mind up about what type you want "5.0" to be represented as in your
program and code accordingly.
int('5.0') raises an exception rather than rounding or truncating to
5. That is probably what most people want, and it seems the original
poster wanted that, too.
I always use int(n). If I ever find a situation where I want another
syntax for integers for some specialized use, I'll approach it as a
normal parsing problem and use regexes and so on -- wrapped in a
function.
The problem becomes clearer if you look at floats. There are many
different ways to write a float[0], and Python parses them better and
faster than you and me.
/Jorgen
[0] There would have been more if Python had supported hexadecimal
floating-point literals, like (I believe) C does.
--
// Jorgen Grahn <grahn@ Ph'nglui mglw'nafh Cthulhu
\X/ snipabacken.se R'lyeh wgah'nagl fhtagn!
Jorgen Grahn wrote:
[0] There would have been more if Python had supported hexadecimal
floating-point literals, like (I believe) C does.
C99 does. On the other hand, it isn't a feature I sorely missed during the
first 20 years or so of C's history, but you could always do some creative
byte twiddling if the need arouse.
arg, as posted earlier:
int("10.0") fails, it will of course work with float("1E+1") sorry for
the noise...
On Tue, Apr 8, 2008 at 10:32 PM, Martin Marcher <ma****@marcher.namewrote:
hmmm
int() does miss some stuff:
>>1E+1
10.0
>>int("1E+1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1E+1'
I wonder how you parse this?
I honestly thought until right now int() would understand that and
wanted to show that case as ease of use, I was wrong, so how do you
actually cast this type of input to an integer?
thanks
martin
-- http://tumblr.marcher.name https://twitter.com/MartinMarcher http://www.xing.com/profile/Martin_Marcher http://www.linkedin.com/in/martinmarcher
You are not free to read this message,
by doing so, you have violated my licence
and are required to urinate publicly. Thank you.
-- http://tumblr.marcher.name https://twitter.com/MartinMarcher http://www.xing.com/profile/Martin_Marcher http://www.linkedin.com/in/martinmarcher
You are not free to read this message,
by doing so, you have violated my licence
and are required to urinate publicly. Thank you.
1E+1 is short hand for a floating point number, not an interger.
>>float("1E+1")
10.0
You could convert the float to an integer if you wanted (i.e. ceiling,
floor, rounding, truncating, etc.).
Cheers,
Steve
-----Original Message-----
From: Martin Marcher [mailto:ma****@marcher.name]
Sent: Tuesday, April 08, 2008 1:32 PM
To: py*********@python.org
Subject: Re: Best way to check if string is an integer?
hmmm
int() does miss some stuff:
>>1E+1
10.0
>>int("1E+1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1E+1'
I wonder how you parse this?
I honestly thought until right now int() would understand that and
wanted to show that case as ease of use, I was wrong, so how do you
actually cast this type of input to an integer?
thanks
martin
-- http://tumblr.marcher.name https://twitter.com/MartinMarcher http://www.xing.com/profile/Martin_Marcher http://www.linkedin.com/in/martinmarcher
You are not free to read this message,
by doing so, you have violated my licence
and are required to urinate publicly. Thank you.
Martin Marcher wrote:
hmmm
int() does miss some stuff:
>>>1E+1
10.0
>>>int("1E+1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1E+1'
I wonder how you parse this?
I honestly thought until right now int() would understand that and
wanted to show that case as ease of use, I was wrong, so how do you
actually cast this type of input to an integer?
thanks
martin
int(float("1E+1")) # untested
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/ This discussion thread is closed Replies have been disabled for this discussion. Similar topics
7 posts
views
Thread by sinister |
last post: by
|
6 posts
views
Thread by Cyrus D. |
last post: by
|
5 posts
views
Thread by Tony Vasquez |
last post: by
|
5 posts
views
Thread by ief |
last post: by
|
3 posts
views
Thread by Oliver Saunders |
last post: by
|
2 posts
views
Thread by CSharp |
last post: by
|
6 posts
views
Thread by comp.lang.php |
last post: by
|
5 posts
views
Thread by Cylix |
last post: by
| | | | | | | | | | | | |