我一直在尝试使用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的方式来做这件事。
答案 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()])