\$\begingroup\$
\$\endgroup\$
3
This is my attempt to format a number and put commas where appropriate. I was wondering if this could be done in a simpler way.
It's used by calling format_string_number("123456789")
and prints 123,456,789.
def format_string_number(st):
inputVal = list(st)
inputVal.reverse()
returnVal = []
for index, value in enumerate(inputVal):
returnVal.insert(0,value)
if (index+1) %3 == 0:
returnVal.insert(0,",")
if returnVal[0] == ",":
returnVal.pop(0)
print("".join(returnVal))
Jamal
35.2k13 gold badges134 silver badges238 bronze badges
asked Sep 19, 2014 at 23:44
1 Answer 1
\$\begingroup\$
\$\endgroup\$
3
A few comments:
- It seems odd to write a function for formatting a number that takes a string as an argument;
- Your function doesn't currently deal with
float
numbers correctly (and, as it takes a string argument, you can't easily checkisinstance(arg, int)
); - Your function
print
s the output rather thanreturn
ing it, severely limiting its usefulness; and - You aren't compliant with the style guide.
Also, as pointed out in the comments, this is handled by format
already, and can be used in str.format
too:
>>> "Number: {:,}".format(123456.789)
'Number: 123,456.789'
answered Sep 20, 2014 at 7:30
-
\$\begingroup\$ using
,
is not locale aware \$\endgroup\$user5359531– user53595312019年01月02日 22:24:58 +00:00Commented Jan 2, 2019 at 22:24 -
\$\begingroup\$ @user5359531 true! But nor was the original, and that requirement is not in the title or description. \$\endgroup\$jonrsharpe– jonrsharpe2019年01月02日 22:32:39 +00:00Commented Jan 2, 2019 at 22:32
-
\$\begingroup\$ I've made a new question here to address that, perhaps you could check it out. \$\endgroup\$user5359531– user53595312019年01月02日 23:07:06 +00:00Commented Jan 2, 2019 at 23:07
lang-py
index % 3 == 2
and you'd avoid a+1
on each iteration. \$\endgroup\$format(123456789, ",")
suffice? \$\endgroup\$format(int("123456789"), ",")
\$\endgroup\$