从Python中的文件中读取n个测试用例

时间:2012-10-21 19:13:12

标签: python python-2.7

我一直在尝试使用Python进行一些示例编程竞赛问题,但我一直被文件阅读困扰。

我正在从stdin读取,第一行是后面的测试用例数,每个后续行包含两个我需要处理的整数。 E.g。

3
4 -10
0 5
6 20
2
0 -1
20 10
etc...

我找到了一个看起来像这样的C ++解决方案:

int main()
{
 int runs,a,b ;
 cin >> runs ;
 while(runs--)
 {
  cin >> a >> b ;
  long long ret = solve(a,b) ;
  cout << ret << endl ;
 }
 return 0 ;
}

我在Python中提出的最接近的是:

t = int(raw_input())
answer = 0
while t :
    n, m = map(int, raw_input().split())
    answer = solve(n,m)
print answer

我在Stack Overflow上看过类似的问题,但是我仍然有一个棘手的时间围绕Python的方式来做这件事。

3 个答案:

答案 0 :(得分:2)

3
4 -10
0 5
6 20
2
0 -1
20 10

你会这样做。

num_of_testcases = int(raw_input()) # this corresponds to 3 and 2
for each in range(number_of_testcases):
    x, y = map(int, raw_input().split()) # this would give the pair of numbers

在比赛中,通常会有测试用例的总数。你这里没有提到它。它被采纳了

total_test_cases = int(raw_input())

然后在total_test_cases上迭代上面的输入收集例程如果总测试用例不存在,则可以在True时迭代,然后在EOF取消。

for tc in range(total_test_cases):
   num_of_testcases = int(raw_input()) # this corresponds to 3 and 2
   for each in range(number_of_testcases):
       x, y = map(int, raw_input().split()) # this would give the pair of numbers

答案 1 :(得分:2)

试试这个:

import sys
for l in sys.stdin.readlines()[1:]:
    a,b = map(int,l.split())
    #now process your test cases

另外根据你的输入文件描述,应该只有一组测试用例。就像这样:

3
4 -10
0 5
4 20

答案 2 :(得分:1)

如果您不想使用raw_input,则可以使用fileinput:

import fileinput

input = fileinput.input()
for line in input:
    for j in range(int(line)):
        solve(*[int(i) for i in input.next().split()])

或使用sys.stdin

import sys

for line in sys.stdin:
    for j in range(int(line)):
        solve(*[int(i) for i in sys.stdin.next().split()])