sobadstan 2024-05-01 14:16 采纳率: 28.6%
浏览 6

PTA平台提交的python答案出现问题


f = [1, 1]
FN = []
def fib(n):
    if len(f)-1==n:
        return f[-1]
    f.append(f[-1]+f[-2])
    return fib(n)
def PrintFN(m, n):
    while f[-1]<n:
        f.append(f[-1]+f[-2])
    for i in range(m, n+1):
        if i in f:
            FN.append(i)
    return FN

m,n,i=input().split()
n=int(n)
m=int(m)
i=int(i)
b=fib(i)
print("fib({0}) = {1}".format(i,b))
fiblist=PrintFN(m,n)
print(len(fiblist))

在pycharm能正常运行

img

但是在PTA平台就报错

img

img

  • 写回答

6条回答 默认 最新

  • 专家-皆知 2024-05-01 14:16
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    根据您提供的信息,您的代码在PyCharm中运行正常但在PTA(编程题在线评测)平台上遇到了错误。错误信息显示为EOFError: EOF when reading a line,这通常意味着程序在尝试读取输入时提前到达了文件或输入流的末尾。

    在PyCharm中运行时,通常您会手动输入数据,而PTA平台则是通过特定的输入数据来测试您的程序。看起来您的程序期望接收多行输入(尽管根据代码,实际上只需要一行),但在PTA平台上可能没有提供足够的输入或者输入格式与程序预期不符,导致程序在尝试读取不存在的额外输入时抛出EOFError

    您的代码中,input().split()这一行期望从标准输入读取一串由空格分隔的值,然后将这些值分别赋给m, n, 和 i。在PTA平台,确保你的测试用例输入是一行,并且包含三个由空格分隔的数字,比如20 100 6

    解决这个问题,确保您的测试用例格式正确。此外,代码本身看起来没有逻辑错误,但可以稍作优化,避免在PrintFN函数中不必要的循环。以下是您的代码的一个微调版本,主要是注释和代码风格的调整,功能上保持一致,确保理解输入是一次性给出的:

    # 初始化斐波那契数列的前两个元素
    f = [1, 1]
    FN = []
    
    def fib(n):
        # 当需要的斐波那契数不在列表中时,递归计算并添加到列表
        while len(f) - 1 < n:
            f.append(f[-1] + f[-2])
        return f[n]
    
    def PrintFN(m, n):
        # 一次性生成直到n的所有斐波那契数,然后筛选出在m和n之间的
        while f[-1] < n:
            f.append(f[-1] + f[-2])
        return [num for num in f if m <= num <= n]
    
    # PTA平台输入处理
    m, n, i = map(int, input().split())  # 使用map函数直接转换为整数列表
    b = fib(i)
    print(f"fib({i}) = {b}")
    fiblist = PrintFN(m, n)
    print(len(fiblist))
    

    确保在PTA平台上,您按照正确的格式提交输入数据。如果问题依然存在,检查PTA平台的具体要求,比如是否有特定的输入格式限制。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月1日