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