Ошибка по построению снежинки в матрице

Андрей)))))))))))))

Новичок
Пользователь
Июл 11, 2020
11
0
1
Windows 10 Home
Python 3
Библиотек нет

Здравствуйте. Написал код для конструирования снежинки в квадратной матрице из нечетного m столбцов и строк. Можете подсказать, если убрать - 1 из первого elif, то почему получиться корявая снежинка ?
Безымянный.png

Для копирования:

m = int(input('Введите m: '))
a = []
g = 0

for i in range(m):
a.append(m * ['.'])

s = (len(a[0]) - 1) // 2

a[(m - 1) // 2] = ['*'] * m

for i in range(m):
for h in range(m):

if i == h:
a[h] = '*'
elif i == m - h - 1:
a[h] = '*'
elif s == h:
a[h] = '*'

for i in range(m):

for h in range(m):
print(a[h], end=' ')
print()

 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Запустил код - он просто рисует квадратную матрицу заполненную *.
 

Андрей)))))))))))))

Новичок
Пользователь
Июл 11, 2020
11
0
1
Нужно вводить большое нечетное число m строк и столбцов(забыл указать в вопросе), тогда получится нормальная снежинка
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Нужно вводить большое нечетное число m строк и столбцов(забыл указать в вопросе), тогда получится нормальная снежинка
Попробовал 55, 115 и т. д. все равно квадрат или прямоугольник когда в строку консоли не помещается.
 

Андрей)))))))))))))

Новичок
Пользователь
Июл 11, 2020
11
0
1
Вот ввел 13
 

Вложения

  • Безымянный.png
    Безымянный.png
    94,3 КБ · Просмотры: 2

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
У меня снежинки не получались потому что в вашей "версии для копирования" код не совпадает с кодом на картинке.
Можете подсказать, если убрать - 1 из первого elif, то почему получиться корявая снежинка ?
Странный вопрос учитывая что вы сами написали эту программу.
Снежинка получается не ровная (сдвигается одна диагональ) потому что индексы в списках начинаются с 0 и соответственно значения переменных i и h в цикле меняются в диапазоне от 0 до m - 1. Если условие elif i == m - h - 1: изменить на elif i == m - h: то в первую строку (i = 0) символ * не попадет и в остальных строках он сместится на одну позицию вправо.
 
  • Мне нравится
Реакции: Андрей)))))))))))))

Андрей)))))))))))))

Новичок
Пользователь
Июл 11, 2020
11
0
1
Спасибо
 

Форум IT Специалистов