输入三个小写字符按字母顺序排序的程序调试求助
问题
需求:编写程序接收三个小写字符,按字母顺序输出。提示说明排序三个字符有6种排列,例如输入CBA时输出ABC。
我编写了包含6种排列判断逻辑的代码,但仅获得3/10的测试通过率,调整输出顺序也无法解决逻辑错误,请求调试帮助。代码如下:
char1 = input() char2 = input() char3 = input() order1 = str(char1 + char2 + char3) order2 = str(char1 + char3 + char2) order3 = str(char2 + char1 + char3) order4 = str(char2 + char3 + char1) order5 = str(char3 + char2 + char1) order6 = str(char3 + char1 + char2) if order1[0] < order1[1] and order1[1] < order1[2] : print(char1, char3, char2) elif order2[0] < order2[1] and order2[1] > order2[2] : print(char1, char2, char3) elif order3[0] < order3[1] and order3[1] > order3[2] : print(char2, char1, char3) elif order4[0] < order4[1] and order4[1] > order4[2] : print(char2, char3, char1) elif order5[0] < order5[1] and order5[1] > order5[2] : print(char3, char1, char2) elif order6[0] < order6[1] and order6[1] > order6[2] : print(char3, char2, char1)
调试分析与修正
原代码核心错误
- 条件与输出完全不匹配:比如第一个
if判断order1是严格升序(char1 < char2 < char3),但输出的却是char1, char3, char2,完全违背了升序要求。 - 判断逻辑偏离目标:后续
elif的条件都是判断排列为“中间字符大于两边”的形状(如order2[0] < order2[1] and order2[1] > order2[2]),而不是判断该排列是否为升序,导致大部分输入场景无法匹配到正确的输出分支。
修正方案
方案1:利用内置排序(简洁高效,推荐)
直接将三个字符存入列表,调用内置排序方法后输出:
# 读取输入,strip()处理可能的空白字符 char1 = input().strip() char2 = input().strip() char3 = input().strip() # 存入列表并排序 chars = [char1, char2, char3] chars.sort() # 按要求输出 print(' '.join(chars))
方案2:按枚举排列的思路实现(符合题目提示)
枚举所有6种排列,找到其中严格升序的排列并输出:
char1 = input().strip() char2 = input().strip() char3 = input().strip() # 列出所有6种字符排列组合 all_permutations = [ (char1, char2, char3), (char1, char3, char2), (char2, char1, char3), (char2, char3, char1), (char3, char1, char2), (char3, char2, char1) ] # 遍历找到升序的排列并输出 for perm in all_permutations: if perm[0] < perm[1] and perm[1] < perm[2]: print(perm[0], perm[1], perm[2]) break
内容的提问来源于stack exchange,提问作者PS Ormenda
相关产品推荐
相关产品推荐

