我是python的新手,并尝试采取一些编码挑战来提高我的技能。我将通过以下方式接受输入:
2
3 1
4 3
首先,我获得了一些测试用例。(2这里)然后基于此,我将获得给定数量的测试用例,每个测试用例为2个整数。第一个是范围,第二个是范围内要搜索的数字。
获得输入的正确,pythonic方式是什么。我这样想,但显然是incorrect
num_testcases = int(raw_input())
for i in num_testcases:
range_limit = int(raw_input())
num_to_find = int(raw_input())
答案 0 :(得分:1)
使用for i in range(num_testcases):
代替for i in num_testcases
。看看range
(或Python 2中的xrange
)。 range(a)
生成从0
到a - 1
的可迭代,因此您的代码会被调用所需的次数。
此外,input
和raw_input
会在遇到换行符时接受输入,这意味着在range_limit = int(raw_input())
中,raw_input
会返回"3 1"
,您可以[{1}}我只是转换为int
。相反,您希望使用string.split
拆分字符串,然后转换单个项目:
num_testcases = int(raw_input())
for i in range(num_testcases):
range_limit, num_to_find = [int(x) for x in raw_input().split()]
答案 1 :(得分:1)
raw_input()
将从STDIN一次读取一行,因此在循环内部,您需要使用str.split()
来获取range_limit
和num_to_find
的值。其次,你不能迭代整数(num_testcases
),所以你需要在那里使用xrange()
(Python 2)或range()
(Python 3):
num_testcases = int(raw_input())
for i in xrange(num_testcases): #considering we are using Python 2
range_limit, num_to_find = map(int, raw_input().split())
#do something with the first input here
<强>演示:强>
>>> line = '3 1'
>>> line.split()
['3', '1']
>>> map(int, line.split())
[3, 1]
请注意,在Python 3中,您必须使用input()
而不是raw_input()
和range()
而不是xrange()
。 range()
将在Python 2和3中都有效,但它会在Python 2中返回一个列表,因此建议使用xrange()
。