Python 3按指定顺序排列三个整数:代码在线判题失败原因排查
代码判题失败原因分析
问题背景
给定三个整数A、B、C(已知A < B < C,但输入顺序不一定),需将它们按指定顺序重新排列。输入第一行为三个正整数(不超过100),第二行为由'A'、'B'、'C'组成的目标顺序字符串。输出按目标顺序排列的三个数,用空格分隔。
测试样例
样例1
输入:
1 5 3 ABC
输出:
1 3 5
样例2
输入:
6 4 2 CAB
输出:
6 2 4
代码问题
该问题来自在线判题系统,共10个测试点。本人编写的代码本地运行正常,但仅通过2个测试点:
l = list(map(int,input().split())) order = input() l.sort() if order == "ABC": print(l[0],l[1],l[2]) elif order == "ACB": print(l[0],l[2],l[1]) elif order == "BAC": print(l[1],l[0],l[2]) elif order == "BCA": print(l[1],l[2],l[0]) elif order == "CAB": print(l[2],l[0],l[1]) else: print(l[2],l[1],l[0])
若将最后一行的else:改为elif order == "CBA":,则所有测试点均失败,反馈为“答案错误”(非运行时错误)。而朋友提供的代码可通过所有测试点:
l = list(map(int,input().split())) order = input() l.sort() result = [] for i in order: if i == "A": result.append(l[0]) elif i == "B": result.append(l[1]) elif i == "C": result.append(l[2]) print(" ".join(map(str, result)))
失败原因
你的代码失败主要源于两个细节问题:
1. 输入字符串未处理空白字符
在线判题系统的输入可能带有隐藏的空白字符(比如第二行输入末尾的空格、换行符残留),而你的代码直接使用严格的字符串全等判断(order == "ABC")。一旦order不是完全匹配的6种字符串之一:
- 用
else分支时,会默认输出CBA顺序,只有当测试点正好是CBA时才会正确,这就是仅通过2个测试点的原因; - 改成
elif order == "CBA"后,所有不匹配的order都没有对应输出分支,代码无有效输出,导致全部测试点失败。
2. 输出格式不符合判题要求
Python中print(l[0], l[1], l[2])会在元素间自动加空格,且末尾会额外带一个空格。而判题系统通常严格要求输出的字符串末尾无多余空格,你的代码输出格式不符合要求,这也是大量测试点失败的核心原因。
朋友的代码正好规避了这两个问题:
- 遍历
order的每个字符,即使字符串有多余空白,只要有效字符是A/B/C就能正确生成结果; - 用
" ".join(map(str, result))生成严格无末尾空格的字符串,完全符合输出格式要求。
修复方案
对你的代码做两处修改即可通过所有测试点:
- 读取
order时去除空白字符:order = input().strip(); - 输出时用
join保证格式正确,例如把print(l[0],l[1],l[2])改为print(" ".join(map(str, [l[0], l[1], l[2]])))。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

