PAT甲级1002题多项式加法代码调试:为什么我的代码无法通过测试点1?

聖光之護
发布: 2025-02-28 23:00:26
原创
346人浏览过

PAT甲级1002题多项式加法代码调试:测试点1失败原因及修正

本文分析pat甲级1002题多项式加法代码调试问题,该代码使用collections.deque表示多项式,实现多项式读取、相加和输出。代码在测试点1失败,原因在于add_polynomial函数中指数比较逻辑错误。

PAT甲级1002题多项式加法代码调试:为什么我的代码无法通过测试点1?

问题代码:

# -*- 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]

SEEK.ai
SEEK.ai

AI驱动的智能数据解决方案,询问您的任何数据并立即获得答案

SEEK.ai 128
查看详情 SEEK.ai

修正后的代码:

# -*- 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?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号