当我从另一点再次调用它时,函数中的Python循环不再运行

时间:2018-08-21 17:22:48

标签: python function debugging

我正在解决一个问题,要求我提供给定输入序列的输出。第一个输入是“ N”,即天数,第二个输入是由N个整数组成的序列,中间用空格隔开,第三个输入是Q(测试用例数),从第四位开始是两个整数(l和r,l


样本输入:

5
65 615 16 516 651
5
45 65
63 5635
654 862
0 956
56 89

对于每个测试用例,我需要生成的输出是利润在l和r(包括两者)之间时有多少天。

样本输入的预期输出:

1
4
0
5
1

我已经用python 3编写了这段代码。但是它仅适用于第一个测试用例,在所有其他情况下,它的输出均为0。

def solve(N,profit,l,r):
    days = 0

    for i in range(N):
        for perdayprofit in profit:
            if l <= perdayprofit <= r :
                days = days + 1
        return days

N = int(input())
profit = map(int,input().split(" "))
Q = int(input())
for i in range(Q):
    l,r = map(int,input().split(" "))
    out = solve(N,profit,l,r)
    print(out)

有人可以向我解释我做错了什么吗?还是有其他方法可以解决这个问题? 我认为我的解决方案应该有效。如果您需要知道的话,我正在使用Jupyterlab和python 3。

1 个答案:

答案 0 :(得分:1)

假设原始帖子中map()的缩进是一个错误,问题是在python 3 >>> m = map(lambda x: x + 1, range(10)) >>> list(m) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(m) [] 中返回了一个充当生成器的对象。这意味着您只能使用一次它的元素,例如:

list

为了能够对其进行多次迭代,您需要执行类似显式创建profit = list(map(int,input().split(" "))) 的操作:

profit = [int(i) for i in input().split(" ")]

也就是说,列表理解可能更干净:

{{1}}