本文分析pat甲级1002题多项式加法代码调试问题,该代码使用collections.deque表示多项式,实现多项式读取、相加和输出。代码在测试点1失败,原因在于add_polynomial函数中指数比较逻辑错误。
问题代码:
# -*- coding:utf-8 -*- from collections import deque def read_polynomial(): tokens = input().split(' ')[1:] p = deque([]) for i in range(0, len(tokens) - 1, 2): p.append((int(tokens[i]), float(tokens[i+1]))) return p def add_polynomial(p1: deque, p2: deque): ret = deque([]) while len(p1) != 0 and len(p2) != 0: item1 = p1[0] item2 = p2[0] if item1[0] == item2[0]: coef = item1[1] + item2[1] if coef != 0.0: ret.append((item1[0], coef)) p1.popleft() p2.popleft() elif item1[0] > item2[1]: # 错误在此行 ret.append(p1.popleft()) else: ret.append(p2.popleft()) if len(p1) != 0: ret.extend(p1) if len(p2) != 0: ret.extend(p2) return ret def print_polynomial(p: deque): ret = [str(len(p))] while len(p) != 0: item = p.popleft() ret.append(str(int(item[0]))) ret.append(f'{item[1]:.1f}') print(' '.join(ret)) if __name__ == '__main__': p1 = read_polynomial() p2 = read_polynomial() p3 = add_polynomial(p1, p2) print_polynomial(p3)
错误分析:
elif item1[0] > item2[1]: 这行代码错误地将多项式项1的指数item1[0]与多项式项2的系数item2[1]进行比较。 正确的比较应该是指数与指数的比较,即item1[0] > item2[0]。
修正后的代码:
# -*- coding:utf-8 -*- from collections import deque def read_polynomial(): tokens = input().split(' ')[1:] p = deque([]) for i in range(0, len(tokens) - 1, 2): p.append((int(tokens[i]), float(tokens[i+1]))) return p def add_polynomial(p1: deque, p2: deque): ret = deque([]) while len(p1) != 0 and len(p2) != 0: item1 = p1[0] item2 = p2[0] if item1[0] == item2[0]: coef = item1[1] + item2[1] if coef != 0.0: ret.append((item1[0], coef)) p1.popleft() p2.popleft() elif item1[0] > item2[0]: # 修正后的比较 ret.append(p1.popleft()) else: ret.append(p2.popleft()) if len(p1) != 0: ret.extend(p1) if len(p2) != 0: ret.extend(p2) return ret def print_polynomial(p: deque): ret = [str(len(p))] while len(p) != 0: item = p.popleft() ret.append(str(int(item[0]))) ret.append(f'{item[1]:.1f}') print(' '.join(ret)) if __name__ == '__main__': p1 = read_polynomial() p2 = read_polynomial() p3 = add_polynomial(p1, p2) print_polynomial(p3)
通过修正这个错误,代码应该能够通过测试点1以及其他测试点。 需要注意的是,虽然这个错误是导致测试点1失败的主要原因,但仍然需要仔细检查代码的其他部分,确保输入输出格式完全符合题目要求。
以上就是PAT甲级1002题多项式加法代码调试:为什么我的代码无法通过测试点1?的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论