我的函数decode()需要从.txt文件中读取文本,将数字-单词对按数字顺序排列成三角形,并返回每行最后一个单词的字符串。
我已经成功地排列了这些对,但是当我尝试隔离每行的最后一个单词时,它会将所有单词打印到字符串中。
txt_file = ['3 love', '6 computers', '2 dogs', '4 cats', '1 I', '5 you']
def decode():
sorted_file = sorted(txt_file)
row = 0
last_words_string = ''
for i in range(len(sorted_file)):
for j in range (0, i + 1):
if row >= len(sorted_file):
break
pairs = sorted_file[row].split()
last_word = pairs[-1]
last_words_string += last_word + ' '
row += 1
print(pairs, end=' ')
print()
print(last_words_string)
decode()
这是我当前的输出:
['1', 'I']
['2', 'dogs'] ['3', 'love']
['4', 'cats'] ['5', 'you'] ['6', 'computers']
I dogs love cats you computers
但我需要它来表达“我喜欢电脑”。 我缺少什么想法吗?
您要获取的单词位于 三角形数 的索引上,其中如果 n 是第 m 个三角形数,则 n = m (m + 1) / 2 . 使用二次公式求解m,我们得到:
m = (sqrt(8n + 1) - 1) / 2
因此我们可以从输入列表的长度中获取三角数的项数,并迭代这些项以获取对应三角数索引处的单词:
from math import isqrt
txt_file = ['3 love', '6 computers', '2 dogs', '4 cats', '1 I', '5 you']
sorted_file = sorted(map(str.split, txt_file), key=lambda t: int(t[0]))
print(*(
sorted_file[(n + 1) * (n + 2) // 2 - 1][1]
for n in range((isqrt(8 * len(sorted_file) + 1) - 1) // 2)
))
输出:
I love computers