strings

S

Scribe

Hi
Somewhat new to Python and would appreciated some help in selecting the
best builtins to achieve what I want.
I pass a string to a function, it is either
empty
spaces
alpha and digits
or
a decimal ie. 5,789.88
if it is a decimal I want to return the number without the commer any
others return 0.
Should be simple or maybe I am.
Any help apreciated.
 
N

Nick Welch

if it is a decimal I want to return the number without the commer any
others return 0.

"commer"?

str.isdigit() should do most of it for you.

def foo(mystr):
if mystr.isdigit():
return "the number without the commer (??) :)"
else:
return 0
 
P

Peter Otten

Scribe said:
Hi
Somewhat new to Python and would appreciated some help in selecting the
best builtins to achieve what I want.
I pass a string to a function, it is either
empty
spaces
alpha and digits
or
a decimal ie. 5,789.88
if it is a decimal I want to return the number without the commer any
others return 0.
Should be simple or maybe I am.
Any help apreciated.

import locale

locale.setlocale(locale.LC_ALL, ("en", None))

def strtofloat(s):
try:
return locale.atof(s)
#return float(s.replace(",", ""))
except ValueError:
return 0.0


for s in "a 0 12 123.4 12,345.67 12,24a".split():
print s, "->", strtofloat(s)

Output:
a -> 0.0
0 -> 0.0
12 -> 12.0
123.4 -> 123.4
12,345.67 -> 12345.67
12,24a -> 0.0

Peter
 
A

Alex Martelli

Scribe said:
Hi
Somewhat new to Python and would appreciated some help in selecting the
best builtins to achieve what I want.
I pass a string to a function, it is either
empty
spaces
alpha and digits
or
a decimal ie. 5,789.88
if it is a decimal I want to return the number without the commer any
others return 0.
Should be simple or maybe I am.
Any help apreciated.

def scribefun(astring):
try: return int(float(astring.replace(',','')))
except ValueError: return 0

This assumes you want to return e.g. 5789 for '5,789.88', i.e.,
an integer truncating the "decimal" (otherwise omit the int()).

Only possible issue is if the "alpha and digits" specifically
include an 'e' as the only "alpha", which builtin float() would
take as an indication of exponential notation; so for example
this would return 100, not 0, for '1e2'. If this is a problem
(unclear from your specs) it ain't all that hard to fix of course.


Alex
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top