Печатайте серию номеров каждые 50 - PullRequest
0 голосов
/ 18 мая 2019

Мне нужно разбить на страницы через 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 ]

3 голосов
/ 18 мая 2019

Да, вы можете указать start (включительно), stop (эксклюзив) и step в диапазоне, так что вы можете написать это как:

pages = 123
count_by_n = 50

for i in <b>range(1, 50*pages + 1, 50)</b>:
    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 голос
/ 18 мая 2019

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))))
1 голос
/ 18 мая 2019

Поскольку вы уже рассчитали свою нумерацию страниц, IMHO, самое простое решение - просто выполнить итерацию по этому диапазону и напечатать 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                                    

А если вы сделаете , а не Вы хотите заранее рассчитать количество страниц, потому что вы хотите сделать этот цикл на основе количества URL n, я бы рекомендовал сделать

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

для удобства чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...