Переставить номера страниц для печати книги


Я не хочу, чтобы мой титул, чтобы быть слишком долго, поэтому, чтобы прояснить путаницу, я лучше объясните вот что мой код делает.

Она просит общего количества страниц книги(PDF файл, в моем случае), и возвращает номер страницы в определенном порядке. Группы из 32 страниц каждого сделать буклет, что, когда все брошюры сшиваются вместе и положил одну поверх другой будет книга готова для вязки.

Один вопрос, как я написал программу, если "страницы" не кратен 4, то будут лишние страницы в конце списка (я не мог придумать способ, чтобы играть). Другой Тид-бит, print_order не должен быть список, он просто должен быть номера страниц через запятую, и я знал, что элементы списка были разделены запятыми, так что список Интс бы дать мне то, что мне нужно. Формула для печати книга на одной, Котор встали на сторону принтер идет как это (н, ф, ф+1, Н-1), где N-последняя страница, а F-первая страница буклета/книги. Причина долгого книгу нужно разбить на брошюры в том, что если я беру пачку 100 статей и просто сложить целую стопку пополам позвоночник будет слишком широким и средним страниц будет, торчащий из крышки. Таким образом, используя N и F, как первую и последнюю страницу, соответственно, небольших брошюр позволяет распечатать всю книгу на что-то более практичное.

Я не беспокоюсь о PEP форматирования на этот раз я действительно просто интересно, как это может быть более эффективно написано. Я знаю, что Python-это очень мощный и я не принимая полное преимущество, что она может предложить. Это, как мне удалось организовать мои мысли и заставлять делать то, что мне требуется. Я знаю, что есть много там, кто мог бы сделать это в гораздо более простой способ, и я просто хочу посмотреть эти пути так что я могу улучшить мой стиль написания!

pages = float(input("How many total pages is the book?" ))
num_booklets = pages/32
if (pages < 32):
    num_booklets = 1
pages_per_booklet = int(pages/num_booklets)
last_booklet = int(pages%32)


f = 1               #first page of the book
n = int(pages_per_booklet)  #last page of the first booklet
k = 1               #number of booklets completed
print_order = []


while (len(print_order) < pages):
    while ((len(print_order) < pages_per_booklet*k) 
    and (len(print_order) < pages)):
        print_order.extend([n, f, f+1, n-1])
        n -= 2
        f += 2
    k += 1
    n = pages_per_booklet * k
    f = 1 + (pages_per_booklet*(k-1))
    if ((len(print_order)+pages_per_booklet) > pages):
        n = int(pages)
        f = int(pages) - last_booklet


print(print_order)


147
3
задан 10 марта 2018 в 05:03 Источник Поделиться
Комментарии
1 ответ

Я переписал мой сценарий с помощью цикла for, который я должна была сделать с самого начала. Однако есть еще много повторов, так что моя интуиция говорит мне, что может быть лучше.

Тем не менее, я считаю его гораздо более читабельным этот раз и я больше не получить лишние номера страниц в конце.

pages =             float(input("How many total pages is the book? "))
booklets = pages / 32
pages_per_booklet = pages / booklets
last_booklet = pages % 32
k = 1
booklet = []

for bklts in range(1, int(booklets + 1)):
n = int(pages_per_booklet * k)
f = 1 + (int(pages_per_booklet) * (k-1))
booklet.extend(make_booklet(f, n))
k += 1
if (len(booklet) + int(last_booklet) == pages):
n = int(pages)
f = 1 + int(pages - last_booklet)
booklet.extend(make_booklet(f, n))

def make_booklet(f, n):
booklet = []
while n > f:
booklet.extend([n, f, f+1, n-1])
f += 2
n -= 2
return booklet

print(booklet)

0
ответ дан 10 марта 2018 в 07:03 Источник Поделиться