我正在尝试制作一个带有一串数字“一亿九千二百七十三一”的程序,然后把它变成相应的数字。这是我到目前为止的代码:
def string_to_num(text):
text = text.lower()
words = text.split()
numbers = []
output1 = []
output2 = []
output3 = []
output4 = []
hold = 1
l = 1
for current_word in words:
number = word_to_number(current_word)
numbers.append(number)
for i in range(len(numbers)):
current_num = numbers[i]
if i == len(numbers)-1:
output1.append(current_num)
continue
else:
previous_num = numbers[i-1]
if current_num > 999:
output1.append(current_num)
continue
else:
if previous_num < current_num:
output1.append(current_num * previous_num)
output1.pop(i-l)
l += 1
continue
else:
output1.append(current_num)
continue
for i in range(1, len(output1[:])):
current_num = output1[i]
previous_num = output1[i-1]
if current_num > 999:
output2.append(current_num)
continue
else:
if output1[i-1] > current_num and previous_num < 1000:
output2.append(current_num + previous_num)
continue
else:
output2.append(current_num)
print('output2', output2)
string_to_num('One hundred ninety two thousand seven hundred thirty one')
它起作用的方式是,在开始时,函数接受数字并将其放入另一个函数中,我将'word_to_number()'转换为相应的数字。我将所有数字值放入一个循环中,得到以下结果:
[1,100,90,2,1000,7,100,30,1]
程序的下一部分将确保添加数百个乘以正确的因子。它采用前面的列表并将其转换为如下所示的列表:
[100,90,2,1000,700,20,1]
请注意,100和700现已合并。
我遇到问题的部分是将数字加在一起并将它们添加到新列表output2中。上面的当前代码产生以下列表:
[190,92,1000,700,730,31]
什么时候看起来像这样:
[192,1000,731]
关于如何使其正常工作的任何想法?我已经尝试将数字加在一起,然后使用.pop从新列表中删除原始数字,但我得到错误'索引不在范围内'。非常感谢任何帮助!