Прошу помочь с функцией def при работе с массивами. Python
Прошу помочь в решении задачи:
Заполнить двумерный массив случайными целыми числами (функция).
Найти наибольший (функция) и наименьший (функция) элементы массива и, чередуя, заполнить ими одномерный массив заданной размерности.
Вывести исходный (функция) и одномерный (функция) массивы на экран. ( max, min считает правильно через раз).
Подскажите как закончить.
from random import random
N = 3
M = 4
mtx = []
arr = [0] * N*M
for i in range(N):
a = []
for j in range(M):
a.append(int(random()*100))
mtx.append(a)
for i in range(N):
for j in range(M):
print("%3d" % mtx[i][j], end='')
print()
print()
k = -1
for j in range(M):
for i in range(N):
k += 1
arr[k] = mtx[i][j]
print("%3d" % arr[k], end='')
print()
def search_min(a):
el_min = a[0]
for elm in a[1:]:
if elm < el_min:
el_min = elm
print('min:' + str(el_min))
def search_max(a):
el_max = a[0]
for elm in a[1:]:
if elm > el_max:
el_max = elm
print('max:' + str(el_max))
search_min(a)
search_max(a)
== RESTART: C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\7777.py ==
11 51 62 57
17 79 89 96
40 76 74 3
11 17 40 51 79 76 62 89 74 57 96 3
min:3
max:76
== RESTART: C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\7777.py ==
96 8 58 53
53 24 71 78
58 13 45 77
96 53 58 8 24 13 58 71 45 53 78 77
min:13
max:77
== RESTART: C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\7777.py ==
75 59 97 75
67 23 34 41
71 84 60 92
75 67 71 59 23 84 97 34 60 75 41 92
min:60
max:92
Ответы (2 шт):
Какие-то примечания и правки (в конце полная программа):
Ваш массив должен быть двухмерным — значит, он должен быть списком списков, в котором всякой внутренний список будет строкой матрицы. Например:
[[1, 2], [3, 4], [5, 6]] # матрица 3x2, т.е. 3 строки и 2 столбцыВместо сложного
int(random()*100)возможно использовать другую функцию из модуля random, именно randint():from random import randint randint(0, 99) # генерирует случайное число от 0 до 99 (включительно 0 и 99)Значит, код для задания
Заполнить двумерный массив случайными целыми числами (функция)
может быть например такой (всё, что я пишу, я и тестировал):
from random import randint M = 3 N = 4 N_VEC = 7 # Размерность одномерного массива; пока не используем (но в конце да) FROM = 0 TO = 99 def fill_matrix(): matrix = [] for __ in range(M): row = [] for __ in range(N): row.append(randint(FROM, TO)) matrix.append(row) return matrixЧудесное имя переменной
__(два символа нижнего подчеркивания) в циклахforподсказывает, что эта переменная в дальнейшем не будет использована (но какое-то имя нужно для правильного синтаксиса).(Возможно применить и «нормальные» имена, например
mиn, но в Питоне такая обычай.)Так как наибольший и наименьший элемент лучше определить из одномерного массива (списка) чем из двухмерного (матрицы), напишем функцию для перевода матрицы в список:
def matrix_to_list(matrix): result = [] for row in matrix: result += row return resultНаписать функции для наибольшего и наименьшего элемента будет теперь очень просто — переведем матрицу в список и применим стандартную функцию
max()илиmin():def maximum(matrix): lst = matrix_to_list(matrix) return max(lst) def minimum(matrix): lst = matrix_to_list(matrix) return min(lst)Для заполнения одномерного массива (т.е. списка) размерности
nчередующими значениямиaиbвозможно поступать например так:def fill_alternately(n, a, b): result = [a] for __ in range(1, n): if result[-1] == a: result.append(b) else: result.append(a) return resultФункции для вывода на экран напишем так, что сначала будет функция для вывода одномерного массива (списка), которую затем применим в определении функции для вывода двухмерного массива (матрицы):
def list_out(lst): for val in lst: print(f'{val:3}', end='') print() def matrix_out(matrix): for row in matrix: list_out(row)
Но и теперь у вас уже все нужные функции, остается только применить их (т.е. вызвать их с подходящими параметрами):
matrix = fill_matrix()
min_val = minimum(matrix)
max_val = maximum(matrix)
vector = fill_alternately(N_VEC, max_val, min_val)
matrix_out(matrix)
print()
list_out(vector)
Полная программа:
from random import randint
M = 3
N = 4
N_VEC = 7
FROM = 0
TO = 99
def fill_matrix():
matrix = []
for __ in range(M):
row = []
for __ in range(N):
row.append(randint(FROM, TO))
matrix.append(row)
return matrix
def matrix_to_list(matrix):
result = []
for row in matrix:
result += row
return result
def maximum(matrix):
lst = matrix_to_list(matrix)
return max(lst)
def minimum(matrix):
lst = matrix_to_list(matrix)
return min(lst)
def fill_alternately(n, a, b):
result = [a]
for __ in range(1, n):
if result[-1] == a:
result.append(b)
else:
result.append(a)
return result
def list_out(lst):
for val in lst:
print(f'{val:3}', end='')
print()
def matrix_out(matrix):
for row in matrix:
list_out(row)
matrix = fill_matrix()
min_val = minimum(matrix)
max_val = maximum(matrix)
vector = fill_alternately(N_VEC, max_val, min_val)
matrix_out(matrix)
print()
list_out(vector)
from random import randint
N = 3
M = 4
arr = [0] * N*M
def create_matrix_rand(n = N, m = M):
matrix = []
for i in range(0, N):
matrix.append([])
for _ in range(0, M):
matrix[i].append(randint(0, 1000))
return matrix
matrix = create_matrix_rand()
def find_min(matrix = matrix):
min = matrix[0][0]
for row in matrix:
for el in row:
if el < min:
min = el
return min
def find_max(matrix = matrix):
max = matrix[0][0]
for row in matrix:
for el in row:
if el > max:
max = el
return max
def print_matrix(matrix = matrix):
for row in matrix:
for el in row:
print(el, end=" ")
print()
def create_list_of_max_min(lst_length = len(matrix) * len(matrix[0])):
lst = []
max = find_max()
min = find_min()
for i in range(0, lst_length):
if i % 2 == 0:
lst.append(max)
else:
lst.append(min)
return lst
def print_list(lst):
for el in lst:
print(el, end=" ")
print(f"Исходная матрица: ")
print_matrix()
print(end="\n\n\n")
min = find_min()
print(f"Минимальное значение: {min}", end="\n\n\n")
max = find_max()
print(f"Максимальное значение: {max}", end="\n\n\n")
one_dimensional = create_list_of_max_min()
print("Одномерный массив заполненный максимальными и минимальными элементами: ")
print_list(one_dimensional)