每50个数字打印系列

时间:2019-05-18 18:54:11

标签: python algorithm loops recursion functional-programming

我需要通过API进行分页,并且正在创建URL。

URL看起来像这样: /search/officers?q=XXXXX&items_per_page=50&start_index={}

返回的JSON中允许的每页最大项目为50,并且基于我需要更改start_index={}字符串的页面数。

我用总结果数除以每页的最大项目数来计算我需要执行的分页数。

pages = 355 
count_by_n = 50

for i in range(pages+1):
    if i is 0:
        print("start_index={}".format(i))
    else:
        global count_by_n 
        count_by_n += 50
        print(str("start_index={}".format(str(count_by_n + 1))))`

产生:

start_index=0
start_index=101
start_index=151
start_index=201
start_index=251
start_index=301
start_index=351
start_index=401

<>:7: SyntaxWarning: name 'count_by_n' is assigned to before global declaration

从技术上讲,这是我想要的结果,但我想知道是否有一种方法可以解决该消息,并可能通过递归来解决此问题。

3 个答案:

答案 0 :(得分:3)

是的,您可以在范围内指定start(包括),stop(不包括)和step,因此可以这样写:

pages = 123
count_by_n = 50

for i in range(1, 50*pages + 1, 50):
    print('start_index={}'.format(i))

然后产生:

>>> pages = 355
>>> for i in range(1, 50*pages + 1, 50):
...     print('start_index={}'.format(i))
... 
start_index=1
start_index=51
start_index=101
start_index=151
start_index=201
start_index=251
start_index=301

答案 1 :(得分:1)

您已经计算了分页,恕我直言,最简单的解决方案是简单地遍历该范围并打印50*i + 1

pages = 355
for i in range(pages):
    print(f'start_index={50*i+1}')

# start_index=1
# start_index=51                                              
# start_index=101              
# ... 
# start_index=17601
# start_index=17651                                         
# start_index=17701                                    

如果您不是要事先计算页面数,因为您想基于网址n进行循环,我建议您做< / p>

n = 17710
for i in range(0, n, 50):
    print(f'start_index={i+1}')

为了便于阅读。

答案 2 :(得分:1)

SyntaxWarning的出现是因为global count_by_n在for循环中被多次评估,更重要的是,已经为变量分配了值。为了摆脱警告,您应该每个变量仅使用global关键字一次(因此在for循环之外),并且在分配值之前,例如:

pages = 123
global count_by_n
count_by_n = 50

for i in range(pages+1):
    if i is 0:
        print("start_index={}".format(i))
    else:
        count_by_n += 50
        print(str("start_index={}".format(str(count_by_n + 1))))