Форум сайта python.su
Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающихся строкой, содержащей только строку “end” (без кавычек)
Программа должна вывести матрицу того же размера, у которой каждый элемент в позиции i, j равен сумме элементов первой матрицы на позициях (i-1, j), (i+1, j), (i, j-1), (i, j+1). У крайних символов соседний элемент находится с противоположной стороны матрицы.
В случае одной строки/столбца элемент сам себе является соседом по соответствующему направлению.
Пример: http://i66.fastpic.ru/big/2014/1121/ac/61deb59c25a99f247e77924ef840deac.jpg
Офлайн
вот так это выглядит для 2 питона:
flag = True matrix = [] while flag: string = raw_input('Vvedite stroku matricy. elementy razdelyaem probelom. end - konec vvoda: ') if string != 'end': row = map(int, string.split(' ')) matrix.append(row) else: flag = False def get_new_matrix(matrix): new_matrix = [] for i, row in enumerate(matrix): new_row = [] for j, el in enumerate(row): element = sum([ matrix[i-1][j], matrix[i][j-1], matrix[i+1][j] if i != len(matrix)-1 else matrix[0][j], matrix[i][j+1] if j != len(matrix)-1 else matrix[i][0]]) new_row.append(element) new_matrix.append(new_row) return new_matrix for row in get_new_matrix(matrix): print(' '.join(map(str, row)))
Офлайн
botinag ..жаль что для 2 питона, попробую переделать…
Отредактировано Stroncy (Ноя. 21, 2014 22:41:29)
Офлайн
string = m = [] while string != 'end': string = input('Vvedite stroku matricy. elementy razdelyaem probelom. end - konec vvoda: ') m.append(list(map(int, string.split(' ')))) if string != 'end' else None li, lj = len(m), len(m[0]) new = [[sum([m[i-1][j], m[(i+1)%li][j], m[i][j-1], m[i][(j+1)%lj]]) for j in range(lj)] for i in range(li)]
Офлайн
terabayt, у вас программа в обще ничего не выводит или так задумано? ))
Офлайн
ну вставте вконце
print(new)
Офлайн
terabayt, нужно их вывести без кавычек и скобок, и как матрицу.
Отредактировано Stroncy (Ноя. 22, 2014 20:04:15)
Офлайн
[print(' '.join(map(str, row))) for row in new]
Офлайн
terabayt, Спасибо Большое!!! прога подошла
Офлайн
terabayt
можете обьячнить метод [[sum([m, m, m, m]) for j in range(lj)] for i in range(li)]
Офлайн