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

Python优先级调度程序遇SyntaxError: unexpected EOF while parsing错误求助

解决优先级调度程序的SyntaxError及逻辑问题

一、修复SyntaxError错误

错误根源

你使用Python 2执行了代码。Python 2的input()函数会将用户输入当作Python表达式解析,输入4 HLHH会被误认为是代码片段,从而触发SyntaxError: unexpected EOF while parsing。

修复方案

  1. 推荐方案:使用Python 3运行代码。Python 3的input()函数会直接将输入读取为字符串,符合你的代码设计逻辑。
  2. 兼容Python 2方案:如果必须用Python 2执行,将main()函数中的inputStr=input("Input:")替换为inputStr=raw_input("Input:")——raw_input()是Python 2中读取字符串输入的正确方法。

二、优化程序逻辑(确保输出符合预期)

当前代码存在numPackets < 3时逻辑缺失、输出字符串首尾含多余空格等问题,以下是优化后的完整代码:

import re

# 为指定切片的数据包设置优先级
def setPriorityForBuffer(priorityStr_slice, priorityList_slice):
    counter = 0
    outgoingPkt = []
    # 优先处理高优先级H
    for p in priorityStr_slice:
        if p == 'H':
            outgoingPkt.append(priorityList_slice[counter])
            counter += 1
        else:
            outgoingPkt.append('NA')
    # 填充低优先级L
    for i in range(len(outgoingPkt)):
        if outgoingPkt[i] == 'NA':
            outgoingPkt[i] = priorityList_slice[counter]
            counter += 1
    return outgoingPkt

def getPriority(numPackets, priorityStr):
    # 输入合法性校验
    if numPackets <= 0:
        return 'Wrong input: the number of packets must be greater than 0.'
    if numPackets != len(priorityStr):
        return 'Wrong input: the number of packets is wrong.'
    if not re.match('^[LH]+$', priorityStr):
        return 'Wrong input: the priority must be H or L'
    
    priorityList = [str(i) for i in range(numPackets)]
    outgoingPkt = []
    
    if numPackets <= 3:
        # 处理数据包数量≤3的情况
        outgoingPkt = setPriorityForBuffer(priorityStr, priorityList)
    else:
        # 处理前3个数据包
        outgoingPkt = setPriorityForBuffer(priorityStr[:3], priorityList[:3])
        # 处理剩余数据包
        remaining_prios = priorityStr[3:]
        remaining_indices = priorityList[3:]
        counter = 0
        temp = []
        # 先收集H优先级数据包
        for p in remaining_prios:
            if p == 'H':
                temp.append(remaining_indices[counter])
                counter += 1
            else:
                temp.append('NA')
        # 填充L优先级数据包
        for i in range(len(temp)):
            if temp[i] == 'NA':
                temp[i] = remaining_indices[counter]
                counter += 1
        outgoingPkt.extend(temp)
    
    # 生成无多余空格的输出字符串
    return ' '.join(outgoingPkt)

def main():
    # 获取用户输入
    inputStr = input("Input:")
    inputList = inputStr.split()  # 按任意空白分割,适配多空格输入场景
    if len(inputList) != 2:
        print("Wrong input: please enter number of packets and priority string separated by space.")
        return
    try:
        numPackets = int(inputList[0])
    except ValueError:
        print("Wrong input: number of packets must be an integer.")
        return
    priorityStr = inputList[1]
    # 执行调度并打印结果
    print("Output:", getPriority(numPackets, priorityStr))

# 主程序入口
if __name__ == "__main__":
    main()

优化说明

  • 补全了numPackets < 3时的逻辑处理,覆盖所有数据包数量场景。
  • 重构setPriorityForBuffer函数,改为接收切片参数,提升通用性。
  • 使用' '.join(outgoingPkt)生成输出字符串,避免首尾出现多余空格。
  • 增加输入格式校验(如输入是否为两个部分、数据包数量是否为整数),提升程序健壮性。
  • 测试示例输入4 HLHH,程序会输出Output: 0 2 1 3,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:05:38