@bond_1013
Начинающий веб-разработчик

Почему вывод первого элемента друмерного массива некорректный?

Есть код, в котором я создаю массив размерностью nxm, затем нужно найти число максимально близкое к среднему значению массива, сделал проверку, но у меня вместо элемента массива s[0][0] выводится s[1][0]
import math
def main():
    m=int(input("Введите количество столбцов:"))
    n=int(input("Введите количество строк:"))
    s = [[0] * n] * m
    for i in range(0,m):
        for j in range(0,n):
            print("Введите элемент " , i , j)
            s[i][j]=int(input())
            print(s[i][j])
    print(s[0][0])
    print(matrix(s))
def matrix(s):
    x = 0
    for i in range(len(s[:][:])):
        for j in range(len(s[:][0])):
            x +=s[i][j]
    x = x/(len(s[:][:])*len(s[:][0]))
    print("Avarange = " , x)
    buff=0
    result=0

    for i in range(len(s[:][:])):
        for j in range(len(s[:][0])):
            print(i)
            print(j)
            buff = math.fabs(x - math.fabs(s[i][j]))
            print(x,"-",math.fabs(s[i][j])," = ",buff)
            if result==0:
                result=s[i][j]
            elif buff<result:
                result=s[i][j]
    return result

main()
  • Вопрос задан
  • 66 просмотров
Решения вопроса 2
@o5a
1. s = [[0] * n] * m
Так некорректно инициализировать двумерный массив. Строки получаются одним и тем же элементом (списком). Т.е. s[0] == s[1] == s[2] ...
Можно инициализировать так:
s = [[0] * n] for _ in range(m)]

2.
elif buff<result:
                result=s[i][j]

Здесь сравнивается "разница между текущим элементом и средним значением" с "предыдущим найденным элементом". Хотя по логике нужно первое сравнивать с "разницей между предыдущим найденным и средним", судя по формулировке задачи, т.е. buff<math.fabs(x-result)
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
5dc4ffaee9a62925313234.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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