使用 stdin.read() 从控制台读取值时出现问题

Problem when reading values from console using stdin.read()

提问人:MSaudi 提问时间:9/28/2021 最后编辑:wovanoMSaudi 更新时间:9/30/2021 访问量:92

问:

我有这部分 python 代码,应该从屏幕读取输入值。 当它运行时,它会永远运行。我根据搜索结果尝试了 CTRL+D,但它不起作用。此代码已给出,当我将代码提交给在线评分器时,它可以工作,但在我的 Windows 机器上不起作用。

if __name__ == "__main__":
    data = list(map(int, sys.stdin.read().split()))
    n, capacity = data[0:2]
    values = data[2:(2 * n + 2):2]
    weights = data[3:(2 * n + 2):2]

    opt_value = get_optimal_value(capacity, weights, values)

    print("{:.10f}".format(opt_value))

示例输入应为:

3 2
20 50 
12 12
51 51
python input stdin eof

评论

2赞 Virtuoz 9/28/2021
尝试 input().split() 而不是 sys.stdin.read().split()
1赞 jarmod 9/28/2021
我怀疑它是从屏幕上读取的;-)
1赞 wovano 9/28/2021
在 Windows 上,它是 Ctrl-Z 而不是 Ctrl-D,它应该是该行的第一个字符(后跟 Enter)。因此,在 Windows 上,请尝试:Enter + Ctrl-Z + Enter。这将导致结果中只有一个换行符。
1赞 MSaudi 9/29/2021
@wovano,就是这样,伙计。它应该和你说的一模一样。我试过了,它有效。
1赞 MSaudi 9/29/2021
@wovano 你可以把它作为答案发布,我会接受的。

答:

0赞 wovano 9/30/2021 #1

在 Windows 上,您应该使用 Ctrl-Z 而不是 Ctrl-D。此外,这应该是换行符的第一个字符,并且 Ctrl-Z 之后也应该有一个换行符 (enter)。Ctrl-Z 后面可能还有其他字符,这些字符将被忽略。

因此,在 Windows 上强制执行 EOL 的最短序列是:Enter、Ctrl-Z、Enter

我从经验中知道这一点,并且确实找到了一些相同的答案或评论,但我找不到任何解释这一点的官方文档。如果我找到它,我会把它添加到这个答案中。

(如果您知道此行为的可靠来源,请发表评论。