Python代码战争:如何正确减少要添加到新字符串中的零的数量
以下是CodeWar说明: 您将获得一个数字,并且需要将其作为字符串返回 以扩展形式 注意:所有数字都是大于0的整数 这是我的密码Python代码战争:如何正确减少要添加到新字符串中的零的数量,python,Python,以下是CodeWar说明: 您将获得一个数字,并且需要将其作为字符串返回 以扩展形式 注意:所有数字都是大于0的整数 这是我的密码 def expanded_form(num): num = list(str(num)) num = [int(i) for i in num] new_string = '' for each in num: if each != 0: a = len(num) - 1
def expanded_form(num):
num = list(str(num))
num = [int(i) for i in num]
new_string = ''
for each in num:
if each != 0:
a = len(num) - 1
new_string += ('%s' + '0' * a + ' + ') %(each)
num.pop(0)
else:
num.pop(0)
return new_string[0:len(new_string)-3]
当我运行数字70304的函数时,我期望
70000 + 300 + 4
但我明白了
70000 + 3000 + 400
我认为我的代码将遍历num
中的每个数字,如果为零,它将再次缩短列表。下一个循环,a
将生成要附加到数字3和4上的正确数量的零。我做错了什么
编辑:我更改了函数,使其对整数而不是字符串进行操作。但结果仍然相同。分析 我只在一个地方追踪了你的循环: 对于num中的每一个: a=len(num)-1 打印编号,[每个],a 如果每个都有!=0:
新字符串+=(每个+'0'*a++') num.pop(0) 输出:
['7', '0', '3', '0', '4'] ['7'] 4
['0', '3', '0', '4'] ['3'] 3
['3', '0', '4'] ['4'] 2
70000 + 3000 + 400
['7', '0', '3', '0', '4'] ['7'] 4
['7', '0', '3', '0', '4'] ['0'] 3
['7', '0', '3', '0', '4'] ['3'] 2
['7', '0', '3', '0', '4'] ['0'] 1
['7', '0', '3', '0', '4'] ['4'] 0
70000 + 300 + 4
两个问题:
num
。这对您的迭代是致命的每个
在每次迭代中前进一个位置,因此它将只命中字符串中的偶数位置每个
都是一个字符;将其与整数值0进行比较。这仅适用于空字符def expanded_form(num):
num = list(str(num))
new_string = ''
for i, each in enumerate(num):
a = len(num) - (i+1)
print num, [each], a
if each != '0':
new_string += (each + '0' * a + ' + ')
return new_string[0:len(new_string)-3]
print expanded_form(70304)
输出:
['7', '0', '3', '0', '4'] ['7'] 4
['0', '3', '0', '4'] ['3'] 3
['3', '0', '4'] ['4'] 2
70000 + 3000 + 400
['7', '0', '3', '0', '4'] ['7'] 4
['7', '0', '3', '0', '4'] ['0'] 3
['7', '0', '3', '0', '4'] ['3'] 2
['7', '0', '3', '0', '4'] ['0'] 1
['7', '0', '3', '0', '4'] ['4'] 0
70000 + 300 + 4
分析 我只在一个地方追踪了你的循环: 对于num中的每一个: a=len(num)-1 打印编号,[每个],a 如果每个都有!=0:
新字符串+=(每个+'0'*a++') num.pop(0) 输出:
['7', '0', '3', '0', '4'] ['7'] 4
['0', '3', '0', '4'] ['3'] 3
['3', '0', '4'] ['4'] 2
70000 + 3000 + 400
['7', '0', '3', '0', '4'] ['7'] 4
['7', '0', '3', '0', '4'] ['0'] 3
['7', '0', '3', '0', '4'] ['3'] 2
['7', '0', '3', '0', '4'] ['0'] 1
['7', '0', '3', '0', '4'] ['4'] 0
70000 + 300 + 4
两个问题:
num
。这对您的迭代是致命的每个
在每次迭代中前进一个位置,因此它将只命中字符串中的偶数位置每个
都是一个字符;将其与整数值0进行比较。这仅适用于空字符def expanded_form(num):
num = list(str(num))
new_string = ''
for i, each in enumerate(num):
a = len(num) - (i+1)
print num, [each], a
if each != '0':
new_string += (each + '0' * a + ' + ')
return new_string[0:len(new_string)-3]
print expanded_form(70304)
输出:
['7', '0', '3', '0', '4'] ['7'] 4
['0', '3', '0', '4'] ['3'] 3
['3', '0', '4'] ['4'] 2
70000 + 3000 + 400
['7', '0', '3', '0', '4'] ['7'] 4
['7', '0', '3', '0', '4'] ['0'] 3
['7', '0', '3', '0', '4'] ['3'] 2
['7', '0', '3', '0', '4'] ['0'] 1
['7', '0', '3', '0', '4'] ['4'] 0
70000 + 300 + 4
这是伟大的,但你也可以在一行。
我在你允许的情况下出版了它(我希望你把它给我)。如果你不想要这个,请在评论中告诉我删除它
连接([(每个+'0'*(len(str(num))-(i+1))+'+'))\
对于i,枚举(str(num))中的每个,如果每个!=“0'])[:-3]
或者如果你想要一个函数
def扩展形式(num):
返回“”。join([(每个+'0'*(len(str(num))-(i+1))+'+'))\
对于i,枚举(str(num))中的每个,如果每个!=“0'])[:-3]
这很好,但你也可以一行完成。
我在你允许的情况下出版了它(我希望你把它给我)。如果你不想要这个,请在评论中告诉我删除它
连接([(每个+'0'*(len(str(num))-(i+1))+'+'))\
对于i,枚举(str(num))中的每个,如果每个!=“0'])[:-3]
或者如果你想要一个函数
def扩展形式(num):
返回“”。join([(每个+'0'*(len(str(num))-(i+1))+'+'))\
对于i,枚举(str(num))中的每个,如果每个!=“0'])[:-3]
请修复缩进这里有一个提示:70304=7x10^5+0x10^4+3x10^3+0x10^2+4x10^1。您可以使用int(log10(n))+1
确定任何大于0的整数的顺序。使用字符串执行此操作感觉效率低下且容易出错。请修复缩进此处有一个提示:70304=7x10^5+0x10^4+3x10^3+0x10^2+4x10^1。您可以使用int(log10(n))+1
确定任何大于0的整数的顺序。使用字符串执行此操作感觉既低效又容易出错。