@fakename

Как найти ошибку в программе(решение задачи) Python?

задача:
Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающихся строкой, содержащей только строку "end" (без кавычек)

Программа должна вывести матрицу того же размера, у которой каждый элемент в позиции i, j равен сумме элементов первой матрицы на позициях (i-1, j), (i+1, j), (i, j-1), (i, j+1). У крайних символов соседний элемент находится с противоположной стороны матрицы.

В случае одной строки/столбца элемент сам себе является соседом по соответствующему направлению.
Sample Input 1:
9 5 3
0 7 -1
-5 2 9
end
Sample Output 1:
3 21 22
10 6 19
20 16 -1
Sample Input 2:
1
end
Sample Output 2:
4
Memory Limit: 256 MB
Time Limit: 5 seconds
мое решение:
a=''
b=[]
q=0
num=-1
while a!="end":                                                 
    a=input()
    for i in a.replace(' ',''):
        if i=='-':
            q+=1
            continue
        elif i=='e' or i=='n' or i=='d':
            continue
        else:
            if q==1:
                b.append(int(i)-int(i)*2)
                q=0
            else:
                b.append(int(i))
    num+=1
gor=num
vert=len(b)//gor

c=[[0 for k in range(vert)] for n in range(gor)]
h=0
for i in range(gor):
    for j in range(vert):
        c[i][j]=int(b[h])
        h+=1
z=[[0 for k in range(vert)] for n in range(gor)] 
for i in range(len(z)):                                         
    for j in range(len(z[0])):
        if j==len(z[0])-1 and i!=len(z)-1:
            z[i][j]=int(c[i-1][j])+int(c[i+1][j])+int(c[i][j-1])+int(c[i][0])
        elif j!=len(z[0])-1 and i==len(z)-1:
            z[i][j]=int(c[i-1][j])+int(c[0][j])+int(c[i][j-1])+int(c[i][j+1])
        elif j==len(z[0])-1 and i==len(z)-1:
            z[i][j]=int(c[i-1][j])+int(c[0][j])+int(c[i][j-1])+int(c[i][0])
        else:
            z[i][j]=int(c[i-1][j])+int(c[i+1][j])+int(c[i][j-1])+int(c[i][j+1])
s=0
for i in range(len(z)):
    for j in z[int(i)]:
        print(str(j)+' ',end='')
        s+=1
        if s==vert:
            print('')
            s=0

на мои проверки отвечает корректно. при проверке на курсах stepic.org выдает ошибку на 6ом тесте.
  • Вопрос задан
  • 3129 просмотров
Решения вопроса 1
@ykalchevskiy
Вы считаете, что все числа -- цифры. То есть, что все элементы матрицы по модулю от 0 до 9. Но это, очевидно, не так. Чтобы упростить получение частей из строки, воспользуйтесь методом split:
str_numbers = a.split()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Возможно в лимиты не укладываетесь. Memory и time. Есть описание шестого теста?
В код не вникал, так как долго, но могу посоветовать поискать решение с меньшим количеством циклов.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы