【问题标题】:python how to read a line until EOFpython如何读取一行直到EOF
【发布时间】:2019-12-02 17:18:16
【问题描述】:

对于这个问题,我正在尝试阅读一些直到 EOF 的行:

https://open.kattis.com/problems/tight

这是我尝试过的:

from collections import defaultdict
import sys


def get_ans(n, k):
    dp = defaultdict(int)
    total = defaultdict(int)
    for i in range(n):
        for num in range(k+1):
            if num+1 <= k:
                dp[(i, num)] += dp[(i-1, num+1)]
            if num-1 >= 0:
                dp[(i, num)] += dp[(i-1, num-1)]
            dp[(i, num)] += dp[(i-1, num)]

            dp[(i, num)] = max(dp[(i, num)], 1)
            total[i] += dp[(i, num)]
    return total[n-1]/((k+1)**n)*100


def main():
    for line in sys.stdin:
        if line == "":
            break
        print(line)
        k, n = map(int, input().split())
        ans = get_ans(n, k)

        print(str.format('{0:.6f}', ans))



if __name__ == "__main__":
    main()

问题:如果我将输入复制并在终端中将其全部粘贴到正在运行的脚本中,我的输出如下所示:

我的意见:

4 1
2 5
3 5
8 7

终端输出

40.740741
3 5

似乎有些行没有被处理——我不明白为什么。

有人能指出我正确的方向吗?

【问题讨论】:

  • 所以你正在循环sys.stdin(并因此从中读取)并在循环中使用input(),它也从sys.stdin读取数据。看起来您的代码最终从sys.stdin 中读取了太多内容。您应该坚持一种从sys.stdin 读取数据的方法。

标签: python input


【解决方案1】:

main 中,我建议使用while 循环,正如input 已经指出的那样,input 会为您处理来自sys.stdin 的传入数据。

def main():
    line = input()
    while line:
        k, n = map(int, line.split())
        ans = get_ans(n, k)
        print(str.format('{0:.6f}', ans))

        line = input()

【讨论】:

    【解决方案2】:

    正如@ForceBru 指出的那样,我在input() 而不是line 上分裂。

    【讨论】:

    • 这是评论,不是正确答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2020-10-24
    • 2010-09-17
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多