Python解CodeChef AUCTION题输出全为Alice的逻辑错误排查
CodeChef AUCTION题代码错误排查与修正方案
题目基础信息
- 题目来源:CodeChef平台,题目编号AUCTION
- 规则说明:Alice、Bob、Charlie三人参与拍卖,三人出价分别为
AA、BB、CC卢比,三个数值互不相同,出价最高者赢得拍卖,代码需要输出最终中标人的姓名。
原有问题代码
t = int(input()) for i in range(t): n = (a,b,c) = map(int,input().split()) a , b , c = "Alice","Bobs","Charlie" highest = max(n, default = 0) highest = a or b or c print(highest)
运行异常表现
- 测试用输入:
200 100 400 155 1000 566 736 234 470 124 67 2
- 实际错误输出:所有用例均返回
Alice,和预期结果不符
Alice Alice Alice Alice
核心逻辑错误点
- 变量覆盖:代码先将读取到的三个整数出价存入
a/b/c变量,下一行立刻将三个变量重新赋值为姓名字符串,原始出价数据被直接覆盖,后续完全无法参与比较。 - 计算结果未关联映射:虽然通过
max(n)算出了最高出价的数值,但没有做任何判断来确认这个最高值属于三个竞拍者中的哪一位,该行计算属于无效代码。 - 逻辑运算符误用:
highest = a or b or c的运行逻辑是从左到右返回第一个布尔值为真的对象,非空字符串的布尔值恒为真,因此该行永远会返回第一个值"Alice",这是所有用例输出一致的直接原因。 - 拼写错误:Bob的姓名被错写为
"Bobs",多了末尾的多余字符s。
可运行正确代码
t = int(input()) for _ in range(t): alice_bid, bob_bid, charlie_bid = map(int, input().split()) highest = max(alice_bid, bob_bid, charlie_bid) if highest == alice_bid: print("Alice") elif highest == bob_bid: print("Bob") else: print("Charlie")
代码逻辑说明:读取测试用例数后,每轮分别读取三人的出价,计算最高出价后匹配对应出价人输出即可,题目已明确三个出价互不相同,不需要额外处理平局场景。
内容的提问来源于stack exchange,提问作者kannasayheydo
相关产品推荐
相关产品推荐

