Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RFpro.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

SAW
Статус: 10-й класс
Рейтинг: 165
∙ повысить рейтинг »
Марк Крейн
Статус: 5-й класс
Рейтинг: 82
∙ повысить рейтинг »
Хватов Сергей
Статус: Академик
Рейтинг: 31
∙ повысить рейтинг »

∙ PHP / Perl / Python

Номер выпуска:1327
Дата выхода:24.05.2020, 14:45
Администратор рассылки:Коцюрбенко Алексей Владимирович (Старший модератор)
Подписчиков / экспертов:24 / 16
Вопросов / ответов:1 / 1

Консультация # 198640: Уважаемые эксперты! Пожалуйста, помогите с решением задачи: Вот мой код, но он у меня не доработан, помогите доработать n,m=map(int,input().split()) A=[] for i in range(n): A.append([int(j) for j in input().split()]) s=0 w=1000 for i in range(n): for j in range(m): while i != n: while j != m: s += A[i][j] j+=...

Консультация # 198640:

Уважаемые эксперты! Пожалуйста, помогите с решением задачи:
Вот мой код, но он у меня не доработан, помогите доработать
n,m=map(int,input().split())
A=[]
for i in range(n):
A.append([int(j) for j in input().split()])
s=0
w=1000
for i in range(n):
for j in range(m):
while i != n:
while j != m:
s += A[i][j]
j+=1
if s < w:
w = s
i+=1
print(w)
Текст задачи на фото

Дата отправки: 19.05.2020, 14:18
Вопрос задал: kandALS (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Коцюрбенко Алексей Владимирович (Старший модератор):

Здравствуйте, kandALS!

Прежде всего, следует отметить, что использованные Вами в программе операторы цикла for i in range(n) и for j in range(m) уже пробегают все необходимые значения (от 0 до n для i и от 0 до m для j), поэтому стоящие внутри них операторы while i != n и while j != m, выполняющие вместе с командами i+=1 и j+=1 ту же функцию, не нужны (тем более, они не будут работать корректно, поскольку для этого требуется отдельное задание начальных значений i и j, которое Вы не сделали.

Ещё одна серьёзная ошибка - сумма элементов строки (переменная s) должна обнуляться для каждой новой строки, то есть внутри цикла for i in range(n), а не вне его, как у Вас.

Также следует обращать особое внимание на отступы, поскольку в Python нет специальных операторных скобок, наподобие { } в C/C++ или begin end в Pascal, и команды, отн осящиеся к одному оператору, должны иметь один и тот же отступ.

Кроме того, Ваша программа должна вывести не минимальную сумму элементов строки, а саму строку с минимальной суммой элементов, поэтому следует запоминать не только минимальную сумму, но и номер соответствующей строки.

Наконец, хороший стиль программирования требует наличия в программе максимального количества подсказок для стороннего пользователя. По крайней мере, следует перед запросом данных выводить пояснение, какие данные должны быть введены и в каком виде.

С учётом этих замечаний, Вашу программу можно переделать следующим образом:

Код (Python) :: выделить код
# coding: cp1251
n, m = map(int, input("Введите число строк и столбцов (через пробел): ").split())
print("Введите матрицу (построчно):")
A = []
for i in range(n):
 A.append([int(j) for j in input("строка {0:d}: ".format(i+1)).split()])
w = 1000
k = 0
for i in range(n):
 s = 0
 for j in range(m):
  s += A[i][j]
  if s < w:
   w = s
   k = i
print("Строка с минимальной суммой: ", ' '.join(map(str, A[k])))

Здесь во все команды ввода и вывода добавлены соответствующие текстовые пояснения для пользователя (в частности конструкция "строка {0:d}: ".format(i+1) выводит приглашение ввести строку, подставив на место шаблона "{0:d}" первый по порядку аргумент команды format - номер строки). Первая строка программы (# coding: cp1251) обеспечивает корректное отображение символов русского языка для кодовой страницы 1251 (стандартной в Windows). Переменная k запоминает индекс строки с минимальной суммой элементов. Конструкция ' '.join(map(str, A[k])) преобразует все элементы строки в символьный формат и объединяет в одну строку (разделив пробелами), которую можно вывести командой print.

Эта программа выполняет то, что от неё требуется, но её можно сделать ещё компактнее, если Вас не пугают сложные и "навороченные" синтаксические конструкции, обычные для языка Python. В частности, дл я первого цикла (построчного ввода строк двумерного списка) можно переместить оператор for внутрь самого списка,
а вместо поэлементного подсчёта сумм можно использовать встроенную функцию sum, которая сразу подсчитывает сумму элементов строки и даже несколько таких сумм, если использовать вложенный оператор for. Также, имея список сумм элементов строк, можно не только найти в нём нужное нам минимальное значение, но и определить индекс этого значения (с помощью функции index).

С учётом всего вышесказанного программу можно упростить до следующей:
Код (Python) :: выделить код
# coding: cp1251
n, m = map(int, input("Введите число строк и столбцов (через пробел): ").split())
print("Введите матрицу (построчно):")
A = [[int(a) for a in input("строка {0:d}: ".format(i+1)).split()] for i in range(n)]
s = [sum(A[i]) for i in range(n)]
k = s.index(min(s))
print("Строка с минимальной суммой: ", ' '.join(map(str, A[k])))

Консультировал: Коцюрбенко Алексей Владимирович (Старший модератор)
Дата отправки: 24.05.2020, 07:26
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное