Python 迭代双值以生成页码

Python 迭代双值以生成页码,python,python-2.7,if-statement,for-loop,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

我有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)

你可以用数学:

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项,这正确地表明第3页上有第31项:

>>> page_number(30, 15)
2
>>> page_number(31, 15)
3
并将每页25个项目扩展到第1000页:

>>> 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
语句的数量取决于循环的项数,那么您的做法是错误的。

您可以使用数学:

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
page = ( (i-1) // items_per_page ) + 1
item = ( (i-1) % items_per_page ) + 1
对于每页15项,这正确地表明第3页上有第31项:

>>> page_number(30, 15)
2
>>> page_number(31, 15)
3
并将每页25个项目扩展到第1000页:

>>> 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
语句的数量取决于循环的项数,那么您的做法是错误的。

注意:您的条件是奇数。您可以使用
elif
s并避免重复相同的比较:
如果我注意到:您的条件很奇怪。您可以使用
elif
s并避免重复相同的比较:
如果我对python3使用
/
,否则您将得到float对象。您可以使用
divmod()
函数来计算余数和商。这个问题确实有一个python2.7标记,但感谢您提供的提示。。我不知道python有divmodYup,但是
/
在Python2中也可以使用,并且您仍然可以使用
从uuuu future\uuuuu导入真除法
在2中获得相同的除法行为。对Python3使用
/
,否则您将得到浮点对象。您可以使用
divmod()
函数来计算余数和商。这个问题确实有一个python2.7标记,但感谢您提供的提示。。我不知道python有divmodYup,但是
/
在Python2中也可以使用,而且你仍然可以使用
from\uuuuuuu future\uuuuuuu import true\u division
在2中获得相同的除法行为。你是国王!非常感谢你!你是国王!非常感谢你!
page = ( (i-1) // items_per_page ) + 1
item = ( (i-1) % items_per_page ) + 1