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

2024-10-01 05:06:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解决一个问题,这个问题要求我为给定的输入序列提供一个输出。第一个输入是“N”,它是天数,第二个输入是一个由N个整数组成的序列,用空格隔开,第三个输入是Q(测试用例的数量),然后是两个整数(l和r,l<;r),用空格隔开(Q次)。你知道吗


样本输入:

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

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

样本输入的预期输出:

1
4
0
5
1

我已经用python3编写了这段代码。但是它只适用于第一个测试用例,对于所有其他的用例,它打印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和python3。你知道吗


Tags: inforinput测试用例range序列整数days
1条回答
网友
1楼 · 发布于 2024-10-01 05:06:20

假设您的原始文章中return days的缩进是一个错误,问题是在python3中map()返回一个充当生成器的对象。这意味着您只能使用它的元素一次,例如:

>>> 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(" ")]

相关问题 更多 >