0

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

我正在从标准输入读取,第一行是随后的测试用例数,随后的每一行都包含我需要处理的两个整数。例如

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 的方式来解决这个问题。

4

3 回答 3

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
于 2012-10-21T19:19:13.257 回答
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
于 2012-10-21T21:32:11.647 回答
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()])
于 2012-10-21T19:34:58.253 回答