Форум сайта python.su
Всем доброго времени суток!
Я начинаю только изучать язык, просьба сильно не пинать, составляю программку для обсчета матрицы
на вход подается произвольных размеров матрица для примера рассматриваю 3х3
1 1 1
2 3 4
4 3 2
на выходе должна получится матрица 3х3 но уже с суммой элементов
matrix[i][j] = m[i - 1][j] + m[i + 1][j] + m[i][j - 1] + m[i][0]
m = []
z = []
while True:
lst = [str(i) for i in input().split()]
if lst[0] == 'end':#выход из ввода end
break
m.append(lst)
for i in range(len(m)): #преобразование значений матрицы из str в int
for j in range(len(m[0])):
m[i][j] = int(m[i][j])
print(m[i][j], end=' ')#промежуточный вывод значений матрицы
print()
g = len(m[0]) # определяем кол-во столбцов
v = len(m) # определяем кол-во строк
#print(g)
#print(v)
for i in range(g):
for j in range(v):
if i == g and j != v: # обход последней строки до предпоследнего символа
z[i][j] = m[i - 1][j] + m[0][j] + m[i][j - 1] + m[i][j + 1]
if j == v and i != g: #обход последнего столбца до предпоследнего символа
z[i][j] = m[i - 1][j] + m[i + 1][j] + m[i][j - 1] + m[i][0]
if i == g and j == v: #последний символ в строке/столбце
z[i][j] = m[i - 1][j] + m[0][j] + m[i][j - 1] + m[i][0]
if i!=g and j!=v: #обсчет всего остального
z[i][j] = m[i - 1][j] + m[i + 1][j] + m[i][j - 1] + m[i][j + 1] #тут вылетает с index out of range, не могу понять почему
print(z[i][j], end=' ') #вывод матрицы построчно
print()
Отредактировано angree77 (Апрель 24, 2019 15:00:14)
Офлайн
angree77Потому что:
почему происходит index out of range
angree77
как лучше обсчитывать матрицу
Офлайн
doza_andХорошо если Вы такой умный объясните…
Вы не понимаете как работает range.
doza_andДа что Вы говорите? как раз таки отладчиком я и поймал эту ошибку и именно эту строку
Вы не пользуетесь отладчиком и не освоили другие приемы отладки. Без этого невозможно двигаться дальше. Выяснили строку, стройте гипотезы, делайте print индексов.
angree77
z = m + m + m + m
doza_andнет конечно не буду, я попросил объяснить почему так происходит
Вы же не будете все свои ошибки через форумы править.
doza_andВы очень не внимательны в результате и примере кода однотипное сложение двух крайних элементов по вертикали и по горизонтали прошу прощения когда писал условие задачи код забыл поставить вот индексы и съелись…
А вы пишете что нужно 4*m В примере результата другое в примере кода третье.
Офлайн
не надо дублировать темы
Офлайн
Здесь z это пустой список. Следующее использование z вы глядит уже так
z[i][j] = ...
>>> z = [] >>> z[0][0] = 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
Отредактировано JOHN_16 (Апрель 24, 2019 16:09:19)
Офлайн
JOHN_16Спасибо добрый человек, попробую…
Здесь z это пустой список. Следующее использование z вы глядит уже так z = …То есть вы делаете упрощенно говоря следующее
Офлайн
angree77
Я начинаю только изучать язык, просьба сильно не пинать, составляю программку для обсчета матрицы
на вход подается произвольных размеров матрица для примера рассматриваю 3х3
doza_and
Начинать надо с полного уяснения задачи.
angree77Зря ты так общаешься. Он здесь общался много и помогал, а ты здесь первый день. Его тут знают и ценят как участника, а ты ещё ничего не сделал, а уже начинаешь вносить смуту. Так что дам тебе совет: 1) когда на форум заходишь какой-нибудь, сначала приглядись; 2) никогда не нападай на старых участников, так как у них всегда существует неформальное сообщество (никак не оформленное) - ты нападёшь на одного, другой тебе ответит тем же, ты не будешь понимать, почему тебя игнорируют вообще все или сходу тебя посылают, хотя ты в отношении них ничего не делал; 3) почитай материалы по нетикету, там обычно многие понятия описаны в полной мере (будешь знать различия между флудом, флеймом и оффтопом), и там же пишут как заходить в чаты, что надо две недельки посидеть и просто почитать всех и только потом начинать писать, иначе можешь напороться на непонимание или сделать что-то непринятое, у тебя сложится плохая репутация и потом она будет липнуть к каждому твоему сообщению.
По троллить шли бы в другое место если помочь объяснить не можете , а тупо набиваете посты
Отредактировано py.user.next (Апрель 25, 2019 01:36:23)
Офлайн
py.user.nextэээ дружище, с таким подходом каши не сваришь…
Зря ты так общаешься. Он здесь общался много и помогал, а ты здесь первый день. Его тут знают и ценят как участника, а ты ещё ничего не сделал, а уже начинаешь вносить смуту. Так что дам тебе совет: 1) когда на форум заходишь какой-нибудь, сначала приглядись; 2) никогда не нападай на старых участников, так как у них всегда существует неформальное сообщество (никак не оформленное) - ты нападёшь на одного, другой тебе ответит тем же, ты не будешь понимать, почему тебя игнорируют вообще все или сходу тебя посылают, хотя ты в отношении них ничего не делал; 3) почитай материалы по нетикету, там обычно многие понятия описаны в полной мере (будешь знать различия между флудом, флеймом и оффтопом), и там же пишут как заходить в чаты, что надо две недельки посидеть и просто почитать всех и только потом начинать писать, иначе можешь напороться на непонимание или сделать что-то непринятое, у тебя сложится плохая репутация и потом она будет липнуть к каждому твоему сообщению.
angree77
Все равно что Вы пришли бы к доктору, начали объяснять что болит, а он Вам вместо того чтобы выписать лекарство сказал: Ну что вы хотели батенька, не знаете какие таблетки принимать и как лечится? …Идите отсюда погуглите, потом прийдете расскажете как вылечили свой недуг
py.user.nextа на эту тему скажу есть хорошо известная притча, но это уже будет офтоп
Он здесь общался много и помогал
Отредактировано angree77 (Апрель 25, 2019 02:35:52)
Офлайн
Программа начинает обсчитывать матрицы от 2х2 и в сторону увеличения, пока не дотюнькал как сделать с одним элементом, с одним столбцом и одной строкой
m = []
z = []
while True:
lst = [str(i) for i in input().split()]
if lst[0] == 'end':
break
m.append(lst)
v = len(m[0]) # определяем кол-во столбцов
g = len(m) # определяем кол-во строк
for i in range(len(m)):
for j in range(len(m[0])):
m[i][j] = int(m[i][j])
z = [[0 for j in range(v)] for i in range(g)]
for i in range(g):
for j in range(v):
if i == g - 1 and j != v - 1: # обход последней строки до предпоследнего символа
z[i][j] = m[i - 1][j] + m[0][j] + m[i][j - 1] + m[i][j + 1]
if j == v - 1 and i != g - 1: # обход последнего столбца до предпоследнего символа
z[i][j] = m[i - 1][j] + m[i + 1][j] + m[i][j - 1] + m[i][0]
if i == g - 1 and j == v - 1: # последний символ в строке/столбце
z[i][j] = m[i - 1][j] + m[0][j] + m[i][j - 1] + m[i][0]
if i == 0 and j == 0:
z[i][j] = m[-1][0] + m[1][0] + m[0][-1] + m[0][1]
if i != g - 1 and j != v - 1: # обсчет всего остального
z[i][j] = m[i - 1][j] + m[i + 1][j] + m[i][j - 1] + m[i][j + 1]
print(z[i][j], end=' ')
print()
Отредактировано angree77 (Апрель 25, 2019 04:57:16)
Офлайн
angree77Я бы сделал то же самое - послал бы тебя за заданием. Ты не привёл задание, написал какую-то противоречивую, мутную хрень и пытаешься её решить.
во первых если обращаются за помощью, конкретно за советом, что бы ты сделал
angree77Тут дел минут на десять, а ночь и день ты тратишь на возню с неправильно поставленной задачей. Если тебе нужно построить обычный дом, а в чертежах у тебя треугольник нарисован, то ясен пень, что ты будешь его строить несколько лет и не построишь ничего.
я за эту ночь сдвинулся дальше чем за два дня бесплодных попыток обойти ошибку
Офлайн