Python优先级调度程序遇SyntaxError: unexpected EOF while parsing错误求助
解决优先级调度程序的SyntaxError及逻辑问题
一、修复SyntaxError错误
错误根源
你使用Python 2执行了代码。Python 2的input()函数会将用户输入当作Python表达式解析,输入4 HLHH会被误认为是代码片段,从而触发SyntaxError: unexpected EOF while parsing。
修复方案
- 推荐方案:使用Python 3运行代码。Python 3的
input()函数会直接将输入读取为字符串,符合你的代码设计逻辑。 - 兼容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
相关产品推荐
相关产品推荐

