【问题标题】:Python input from stdin in online judges在线评委中来自标准输入的 Python 输入
【发布时间】:2015-09-18 18:44:49
【问题描述】:

我是竞争性编程的初学者并开始学习。熟悉C和C++,但学的是Python。Python输入有困难 问题就像:对于给定数量的测试用例,对于 ech 测试用例,您将在同一行中提供一个数字 N 和另一个数字 K。在这一行之后,一行会有 N 个整数。你只需要像下面给出的那样划分和总结(括号只是为了跟踪)

1 #test cases
3 2 #N  #K
4 5 7 #N integers 

答案是 sum : 7,即 4/2 + 5/2 + 7/2 = 7(整数除法)

我编写了一个简单的 Python 2.7 程序来接受输入并执行操作。

t = map(int,raw_input())
t = t[0]
while t>=0:
    count=0
    n,k = map(int,raw_input().split())
    candies = map(int,raw_input().split())
    for candy in candies:
        count += candy/k
    t -= 1

我收到错误:

vivek@Pavilion-dv6:~/Desktop$ python kids_love_candies.py <in.txt >out.txt 
Traceback (most recent call last):
  File "kids_love_candies.py", line 6, in <module>
    n,k = map(int,raw_input().split())
EOFError: EOF when reading a line

另一个link 建议使用sys.stdin.readline() 读取输入,但我不知道如何将其应用于我的问题。 我应该使用哪一个?为什么?学习和使用它们的正确方法是什么?

【问题讨论】:

  • 我已经执行了你在 python 2.7.9 中发布的脚本,删除括号后,一切正常,打印计数显示 7。你检查过这个文件的行尾吗?这是linux还是windows文件?
  • 我使用的是 ubuntu,文件是使用 sublime 文本和文本文件创建的。 @CristianoAraujo
  • 在线编译器的链接,相同的程序和不同的输入引发相同的错误。 @CristianoAraujo ideone.com/iWY71C
  • @CristianoAraujo 搞错了。 t>=0 应该是 t>0

标签: python python-2.7 stdin raw-input


【解决方案1】:

你试图读太多行,你的 while 条件应该是&gt; 0。但这整件事比需要的要复杂得多

t = int(raw_input()) # no need to map
for _ in range(t): # loop with range instead of manual counting
    # loop body

当我想循环来自标准输入的行时,我通常使用sys.stdin。在这种情况下,您可以忽略计数

raw_input() # ignore the size
for line in sys.stdin:
    n, k = (int(i) for i in line.split())
    count = sum(int(c) for c in raw_input.split()) / k

【讨论】:

  • 是的,这段代码中有些东西,可以更好。哪种方式读取输入更好?
  • 当您只是从标准输入读取所有内容时,我更喜欢这种方式。如果您想阅读一行内容或进行互动,请使用raw_input()。还有其他方法。
猜你喜欢
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
相关资源
最近更新 更多