迭代双值以生成页码

时间:2016-01-24 12:24:01

标签: python python-2.7 if-statement for-loop

我有35个项目分为3页。第1页和第2页有15个项目,第3页有5个。现在我已经创建了循环来告诉脚本去哪里。这是脚本。

for i in range(1,36):
    if i <= 15:
        page = 1
        item = i
    if i > 15 <= 30:
        page = 2
        item = i - 15
    if i > 30 <= 35:
        page = 3
        item = i - 30

    print 'GOTO page %s take item %s' % (page, item)

但将来可能有1000页,页面上有25个项目。所以我正在改变脚本如下。但现在我需要添加更多if语句,例如if i > items_per_page * 22 <= items_per_page * 23:什么是更好,更Pythonic的方法来获得相同的内容?

max_items = 35
items_per_page = 15

for i in range(1, max_items + 1):
    if i <= items_per_page:
        page = 1
        item = i
    if i > items_per_page <= items_per_page * 2:
        page = 2
        item = i - items_per_page
    if i > items_per_page * 2 <= items_per_page * 3:
        page = 3
        item = i - items_per_page * 2

    print 'GOTO page %s take item %s' % (page, item)

2 个答案:

答案 0 :(得分:3)

你可以使用数学:

def page_number(item, items_per_page):
    # 1-based numbering assumed; first item is 1, first page is 1
    return (item - 1) // items_per_page + 1

对于每页15个项目,这正确地说明项目31在第3页:

>>> page_number(30, 15)
2
>>> page_number(31, 15)
3

并一直扩展到第1000页,每页25个案例:

>>> page_number(25005, 25)
1001

只需在你的循环中使用它:

for i in range(1, max_items + 1):
    page = page_number(i, items_per_page)
    item = i - (page - 1) * items_per_page
    print 'GOTO page %s take item %s' % (page, item)

不需要if条款。

一般来说,如果if语句的数量取决于循环的项目数,那么你的方法就是错误的。

答案 1 :(得分:0)

page = ( (i-1) // items_per_page ) + 1
item = ( (i-1) % items_per_page ) + 1