我正在尝试通过不使用format()
的末尾每3个数字插入','来格式化任何数字
123456789变为123,456,789
1000000变成1,000,000
到目前为止,我似乎只是从一开始就做过,我尝试了不同的想法来扭转它,但它们似乎并没有我希望的那样。
def format_number(number):
s = [x for x in str(number)]
for a in s[::3]:
if s.index(a) is not 0:
s.insert(s.index(a), ',')
return ''.join(s)
print(format_number(1123456789))
>> 112,345,678,9
但是显然我想要的是1,123,456,789
我尝试反转范围[:-1:3]
,但得到112,345,6789
说明:我不想使用格式来构造数字,我宁愿只是为了自学而自己理解如何做。
答案 0 :(得分:2)
这是不使用内置功能的解决方案:
def format_number(number):
s = list(str(number))[::-1]
o = ''
for a in range(len(s)):
if a and a % 3 == 0:
o += ','
o += s[a]
return o[::-1]
print(format_number(1123456789))
这是使用内置函数的相同解决方案:
def format_number(number):
return '{:,}'.format(number)
print(format_number(1123456789))
我希望这会有所帮助。 :D
答案 1 :(得分:2)
一种完全不需要内置功能的方式...
def format_number(number):
i = 0
r = ""
while True:
r = "0123456789"[number % 10] + r
number //= 10
if number == 0:
return r
i += 1
if i % 3 == 0:
r = "," + r
这是一个几乎没有内置功能或方法的版本(仍然必须使用str
)
def format_number(number):
i = 0
r = ""
for character in str(number)[::-1]:
if i > 0 and i % 3 == 0:
r = "," + r
r = character + r
i += 1
return r
在没有format
的情况下使用其他内置方法的另一种方法是将数字取反,将其分成3个块,用逗号将它们连接起来,然后再次取反。
def format_number(number):
backward = str(number)[::-1]
r = ",".join(backward[i:i+3] for i in range(0, len(backward), 3))
return r[::-1]
答案 2 :(得分:1)
您当前的方法存在以下缺点
int
),应使用==
/ !=
运算符而不是is
/ is not
运算符检查是否相等/不相等,list.index
从左端返回第一个出现的位置(因此,s.index('1')
在您的示例中将始终为0
),如果索引被代替,我们可以遍历范围(使用{{3} })。我们可以有类似的东西
def format_number(number):
s = [x for x in str(number)]
for index in range(len(s) - 3, 0, -3):
s.insert(index, ',')
return ''.join(s)
>>> format_number(1123456789)
'1,123,456,789'
>>> format_number(6789)
'6,789'
>>> format_number(135)
'135'
range
,list.insert
和str.join
我们可以替换
range
和while
循环,list.insert
使用切片和串联,str.join
并置,喜欢
def format_number(number):
s = [x for x in str(number)]
index = len(s) - 3
while index > 0:
s = s[:index] + [','] + s[index:]
index -= 3
result = ''
for character in s:
result += character
return result
str.format
最后,跟随range
built-in
','选项表示使用逗号分隔千位分隔符。对于可识别语言环境的分隔符,请改用'n'整数表示类型。
您的功能可以简化为
def format_number(number):
return '{:,}'.format(number)
它甚至可以用于float
s。