@neulwert

Bigdigits.py из книги Макла Саммерфилда, как работает программа?

Мне нужна помощь, я новичок, изучаю книгу Макла Саммерфилда - "Программирование на Python3", у него отличная подача материала, но сейчас появились первые трудности, притом при первых же программах. Мне нужно самое главное понять логику кода. К тому же в программе есть ошибка и было бы замечательно её исправить, но это вторично, буду рад если просто поможете её понять.

Вот скриншот кода в pycharm, перепроверял его, все как в книге, ничего своего не добавлял:

5da9979b89610760311971.png

Я пытался вникнуть в программу, прочитал объяснение, суть в том, чтобы мы вводили цифры (0123456789), а они выводились нарисованные звездочками. Но, несмотря на объяснения остались непонятки в коде. Вот с комментариями:

Digits = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine]  # значения этих переменных добавлять не стал

try:
    digits = sys.argv[1]  # эта переменная содержит цифру, которую мы вводим, но зачем на конце элемент [1]?
                         # и как так вышло, что digits присваивается то, что я пишу в терминале?
    row = 0
    while row < 7:  # row специально содержит 0, чтобы условие было всегда True?
        line = ''  # здесь пустая строка, если вы не заметили))
        column = 0
        while column < len(digits):  # опять условие всегда True, т.к. длина цифры = 1, а column = 0
            number = int(digits[column])  # зачем вписывать [column]? Он же = 0? взять первый элемент из введенного числа?
            digit = Digits[number]  # к примеру если ввести 012, из списка Digits возьмутся первые три значения?
            line += digit[row] + '  '  # эти нагромождения списков меня путают... опять на конце ввели кортеж, который = 0
            column += 1  # к этому моменту я окончательно потерял нить логики в этой программе
        print(line)  # это должно выводить на экран полученный результат
        row += 1  # а это читать следующий элемент? Нет?
except IndexError:  # с этим все ясно.
    print('usage: bigdigits.py <number>')  # python bigdigits.py <number> так вызывается прога через терминал
except ValueError as err:
    print(err, 'in', digits)  # здесь python ругается на элемент digits "name digits can be not defined" (видно в скринах)


А вот что получается на выходе:

5da996a80576e178699699.png

В программе ошибка в том, что чем больше пишешь цифр, тем больше они искривляются на выходе, особенно самые последние. И ещё после семерки цифры ставятся под наклоном (это видно в скриншоте), думаю это потому, что неправильно прописана дистанция между цифрами. Надеюсь понятно все разъяснил.
  • Вопрос задан
  • 690 просмотров
Решения вопроса 1
@o5a
column перебирает введенные пользователем цифры и для каждой берет соответствующую фигуру из массива Digits.
row перебирает графику фигуры сверху вниз, и выводит на печать построчно, при этом в каждом ряде кусок фигуры цифр этого ряда "склеивается".

Чтобы фигуры не "ехали", длина каждого элемента списка цифр (Zero, One, .. и т.д.) должна быть одинаковая (в данном примере 6), в сумме звездочек и пробелов. Видно, что например у цифры 7 (список Seven) это не соблюдается (последний элемент вообще '*' хотя должен быть * и 5 пробелов). Из-за таких несоответствий и съезжают фигуры.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Это скорре проблема среды. Любая символьная графика рассчитанна на то что ширина и высота каждого символа одинаковые, но на самом деле такие характеристики только у MonoSpace шрифтов. Поменяйте шрифт и все.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы