Форум сайта python.su
Необходимо исправить код. При вводе разных переменных, особенно B, C, стороны съезжают.
def draw_parallelepiped(A, B, C): A = max(1, A) B = max(1, B) C = max(1, C) print(' ' * (C + 1) + '+' + '-' * (2 * B - 1) + '+') for i in range(C): print(' ' * (C - i) + '/' + ' ' * i + '|' + ' ' * (2 * B - 2 - i) + '/' + ' ' * i + '|') print('+' + '-' * (2 * B - 1) + '+' + ' ' * C + '+') for _ in range(A - 1): print('|' + ' ' * i + '|' + ' ' * (2 * B - 2 - i) + '|' + ' ' * C + '|') print('|' + ' ' * i + '+' + '-' * (2 * B - 2 - i) + '+' + '-' * C + '+') for i in range(C - 1, -1, -1): print('|' + ' ' * (C + i - B) + '/' + ' ' * (2 * B - 2 - i) + '|' + ' ' * i + '/') print('+' + '-' * (2 * B - 1) + '+') A = int(input("Введите высоту (A): ")) B = int(input("Введите ширину (B): ")) C = int(input("Введите глубину (C): ")) draw_parallelepiped(A, B, C)
Отредактировано Frierra (Март 30, 2025 20:13:28)
Прикреплённый файлы: photo_2025-03-30_15-22-56 (2).jpg (23,3 KБ)
Офлайн
[code python]код вставлять между этими тегами[/code]
Офлайн
offset = '' left_edge = '' front_side = '' midl_edge = '' right_side = '' right_edge = '' w = 3 h = 3 d = 3 for i in range(d + h + 3): if i == 0: offset = ' ' * (d + 1) left_edge = '+' front_side = '----' * w midl_edge = '+' if d >= i > 0: offset = ' ' * (d + 1 - i) left_edge = '/' front_side = ' ' * w midl_edge = '/' right_side = ' ' * (i - 1) if i > d: offset = '' right_side = ' ' * d if 0 < i <= h: right_edge = '|' if i == h + 1: right_edge = '+' if i > h + 1: right_edge = '/' right_side = ' ' * (d + h + 1 - i) if i > d + 1: left_edge = '|' front_side = ' ' * w midl_edge = '|' if i == d + 1: left_edge = '+' front_side = '----' * w midl_edge = '+' if i == d + h + 2: left_edge = '+' front_side = '----' * w midl_edge = '+' right_edge = '' line = f'{offset}{left_edge}{front_side}{midl_edge}{right_side}{right_edge}' print(line)
Офлайн
xam1816
offset
>>> offset = '' >>> left_edge = '' >>> front_side = '' >>> midl_edge = '' >>> right_side = '' >>> right_edge = '' >>> >>> w = 3 >>> h = 3 >>> d = 6 >>> >>> for i in range(d + h + 3): ... if i == 0: ... offset = ' ' * (d + 1) ... left_edge = '+' ... front_side = '----' * w ... midl_edge = '+' ... if d >= i > 0: ... offset = ' ' * (d + 1 - i) ... left_edge = '/' ... front_side = ' ' * w ... midl_edge = '/' ... right_side = ' ' * (i - 1) ... if i > d: ... offset = '' ... right_side = ' ' * d ... if 0 < i <= h: ... right_edge = '|' ... if i == h + 1: ... right_edge = '+' ... if i > h + 1: ... right_edge = '/' ... right_side = ' ' * (d + h + 1 - i) ... if i > d + 1: ... left_edge = '|' ... front_side = ' ' * w ... midl_edge = '|' ... if i == d + 1: ... left_edge = '+' ... front_side = '----' * w ... midl_edge = '+' ... if i == d + h + 2: ... left_edge = '+' ... front_side = '----' * w ... midl_edge = '+' ... right_edge = '' ... line = f'{offset}{left_edge}{front_side}{midl_edge}{right_side}{right_edge}' ... print(line) ... +------------+ / /| / / | / / | / / + / / / / / / +------------+ / | | / | | / | |/ +------------+ >>>
Отредактировано py.user.next (Апрель 1, 2025 05:31:43)
Офлайн
Спасибо Вам, что отозвались, но только у Вас параллепипеды не имеют внутренних ребер, а это основное правило задания, + стороны должен задавать пользователь .・゚゚・(/ω\)・゚゚・.
Офлайн
Тут надо декомпозировать задачу - разложить на два отдельных этапа.
На первом этапе сначала нужно представить, что мы выводим это всё не построчно, а по точкам, имея доступ в любую точку экрана в любой момент.
Таким образом, мы можем сообразить, как вообще нарисовать фигуру, как она должна выглядеть, включая все пропорции и все необходимые линии при любых заданных параметрах, которые могут сильно отличаться друг от друга.
Когда мы получили способ изображения фигуры при любых входных параметрах, мы можем перейти ко второму этапу.
На втором этапе мы делаем построчный вывод нескольких разных фигур, и, возможно, пишем даже несколько разных кодов для их вывода, чтобы просто понять, что в этих кодах похоже, а что различается.
Дальше мы уже придумываем параметры для изменяющихся частей ранее полученных кодов. Какие-то части кодов будут одинаковые, а какие-то будут различаться. Вот для этих различающихся нужно будет сделать параметры ещё одни, благодаря которым для этих различающихся частей можно будет сделать единую форму, которая только от параметров зависит. Это как отдельный подалгоритм, параметризованный при этом.
И вот после этого получится соединить это всё воедино и оно будет работать для любых входных параметров правильно и выводить правильно фигуры.
Вот если это всё не проделать, то у вас либо вообще ничего не получится вывести, либо одна из тысячи коробок будет протекать. Все будут показываться правильно, а одна какая-нибудь будет кривой.
Отредактировано py.user.next (вчера 00:07:14)
Офлайн