Skip to main content
 首页 » 编程设计

python如何读取一行直到EOF

2025年05月04日8Leo_wl

对于这个问题,我正在尝试阅读一些行直到 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 
 

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

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

请您参考如下方法:

在 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()