You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python提取金字塔结构每行最后单词失败问题排查

问题定位与修复

你的代码核心问题出在金字塔构建逻辑上,现在的写法每一层只塞了单个单词,根本没把整层元素都放进去,自然取到的不是每层最后一个单词。

错误原因拆解

看这段构建金字塔的代码:

for level in range(1, max_number + 1):
    row = [line.split()[1] for line in lines if int(line.split()[0]) == current_number]
    pyramid.append(row)
    current_number += level
  • 循环里的level从1到max_number(这里是6),但每一轮只找current_number对应的单词:第一轮current_number=1,row里只有chick;第二轮current_number变成1+1=2,row里只有paragraph;第三轮current_number变成2+2=4,row里只有planet。
  • 这样金字塔的每一行都是单个元素,row[-1]只能取到这个唯一元素,结果自然是chick paragraph planet。

修正后的代码

我们需要重新计算每一层的数字区间,把该区间内所有单词都放进对应row,再取最后一个:

def unscramble_lines_from_file(file_path):
    try:
        with open(file_path, 'r') as file:
            lines = [line.strip() for line in file]
        # 提前拆成(数字, 单词)元组,避免重复split
        line_tuples = [(int(line.split()[0]), line.split()[1]) for line in lines]
        sorted_lines = sorted(line_tuples, key=lambda x: x[0])
        return sorted_lines
    except FileNotFoundError:
        return "File not found."
    except ValueError:
        return "Invalid input. Please ensure each line starts with a valid number."

def create_pyramid_from_unscrambled_lines(sorted_tuples):
    try:
        if isinstance(sorted_tuples, str):
            return sorted_tuples
        
        numbers = [num for num, word in sorted_tuples]
        word_map = {num: word for num, word in sorted_tuples}
        pyramid = []
        current_start = 1
        level = 1
        
        while current_start <= max(numbers):
            # 计算当前层的结束数字:起始数 + 层数 -1
            current_end = current_start + level - 1
            # 收集当前层所有数字对应的单词
            row = [word_map[num] for num in range(current_start, current_end + 1) if num in word_map]
            pyramid.append(row)
            # 更新下一层的起始数字
            current_start = current_end + 1
            level += 1

        # 打印排序后的列表
        print("Sorted List:")
        for num, word in sorted_tuples:
            print(f"{num} {word}")

        # 提取每行最后一个单词
        last_words = [row[-1] for row in pyramid if row]
        return ' '.join(last_words)
    except ValueError:
        return "Invalid input. Please ensure each line starts with a valid number."

# 示例调用
input_file_path = "text_file.txt"
unscrambled_result = unscramble_lines_from_file(input_file_path)
last_words_result = create_pyramid_from_unscrambled_lines(unscrambled_result)

print("\nLast Words from Each Row:")
print(last_words_result)

关键修改点

  1. 提前把每行拆成(数字, 单词)的元组,用字典word_map快速查找数字对应的单词,减少重复操作。
  2. 用while循环按层计算数字区间:
    • 第n层包含level个数字,起始数字是上一层结束+1,结束数字是起始+level-1。比如第一层level=1:start=1,end=1;第二层level=2:start=2,end=3;第三层level=3:start=4,end=6。
  3. 收集当前层所有单词后,取row[-1]就是该层最后一个单词,最终得到预期的chick select poem。

内容的提问来源于stack exchange,提问作者john_doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:32:38