Уведомления

Группа в Telegram: @pythonsu

#1 Март 30, 2025 15:26:33

Frierra
Зарегистрирован: 2025-03-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачей на Python

Необходимо исправить код. При вводе разных переменных, особенно 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)

Прикреплённый файлы:
attachment photo_2025-03-30_15-22-56 (2).jpg (23,3 KБ)

Офлайн

#2 Март 30, 2025 19:32:52

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1378
Репутация: +  123  -
Профиль   Отправить e-mail  

Помогите с задачей на Python

[code python]код вставлять между этими тегами[/code]

Офлайн

#3 Апрель 1, 2025 00:32:57

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1378
Репутация: +  123  -
Профиль   Отправить e-mail  

Помогите с задачей на Python

  
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)

Офлайн

#4 Апрель 1, 2025 05:29:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9908
Репутация: +  855  -
Профиль   Отправить e-mail  

Помогите с задачей на Python

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)

Офлайн

#5 Апрель 1, 2025 15:34:32

Frierra
Зарегистрирован: 2025-03-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с задачей на Python

Спасибо Вам, что отозвались, но только у Вас параллепипеды не имеют внутренних ребер, а это основное правило задания, + стороны должен задавать пользователь .・゚゚・(/ω\)・゚゚・.

Офлайн

#6 вчера 00:05:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9908
Репутация: +  855  -
Профиль   Отправить e-mail  

Помогите с задачей на Python

Тут надо декомпозировать задачу - разложить на два отдельных этапа.
На первом этапе сначала нужно представить, что мы выводим это всё не построчно, а по точкам, имея доступ в любую точку экрана в любой момент.
Таким образом, мы можем сообразить, как вообще нарисовать фигуру, как она должна выглядеть, включая все пропорции и все необходимые линии при любых заданных параметрах, которые могут сильно отличаться друг от друга.
Когда мы получили способ изображения фигуры при любых входных параметрах, мы можем перейти ко второму этапу.
На втором этапе мы делаем построчный вывод нескольких разных фигур, и, возможно, пишем даже несколько разных кодов для их вывода, чтобы просто понять, что в этих кодах похоже, а что различается.
Дальше мы уже придумываем параметры для изменяющихся частей ранее полученных кодов. Какие-то части кодов будут одинаковые, а какие-то будут различаться. Вот для этих различающихся нужно будет сделать параметры ещё одни, благодаря которым для этих различающихся частей можно будет сделать единую форму, которая только от параметров зависит. Это как отдельный подалгоритм, параметризованный при этом.
И вот после этого получится соединить это всё воедино и оно будет работать для любых входных параметров правильно и выводить правильно фигуры.

Вот если это всё не проделать, то у вас либо вообще ничего не получится вывести, либо одна из тысячи коробок будет протекать. Все будут показываться правильно, а одна какая-нибудь будет кривой.



Отредактировано py.user.next (вчера 00:07:14)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version