Форум сайта python.su
0
Здравствуйте. Есть несколько вопросов по решению следующей задачи:
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности равны ее наибольшему элементу.
5 3 3 5 7 3 1 7 4 7 7 7 2 9 1 7 5 9 8 8 8 8 0
Задание нужно решить использую цикл while. У меня вопрос, могу ли я использовать дважды цикл while для одной и той же последовательности входящих данных. Думаю за один цикл отыскать максимум последовательности, а втором циклом подсчитать количество максимумов. Но вот не знаю как это реализовать и возможно ли это вообще. Или может кто то сможет что то подсказать на счет альтернативного решения. Буду очень благодарен за любую помощь.
Задача с сайта: http://pythontutor.ru/lessons/while/problems/seq_num_maximal/
Офлайн
857
Тут хватит только одного цикла и пары переменных.
Офлайн
0
py.user.nextКак можно обойтись только одним циклом? На сколько я понимаю, нам же для начала нужно пройти по всем переменным для того что бы определить максимум, а потом нужно еще раз пройти по всем переменным что бы посчитать сколько максимумов в общем задано. Не понимаю как обойтись одним. Можете подсказать как это сделать, а то я только учусь еще многого не знаю. Буду очень благодарен.
Тут хватит только одного цикла и пары переменных.
Офлайн
27
Элементарно, есть хорошая функция max(что-то_итерируемое). Вычислим максимальное значение без всякого цикла, передав список челочисленных значений. Если числовая последовательность - строка, то её можно разбить и применить к каждому элементу int, например получить список lst = list(map(int, stroka.split())). Имея список можно вообще обойтись без цикла. Есть у неё хорошая функция: lst.count(искомое), которая возвращает сколько раз встречается искомое в списке.
Отредактировано Rafik (Окт. 30, 2018 14:18:36)
Офлайн
0
Rafik
Элементарно, есть хорошая функция max(что-то_итерируемое). Вычислим максимальное значение без всякого цикла, передав список челочисленных значений. Если числовая последовательность - строка, то её можно разбить и применить к каждому элементу int, например получить список lst = list(map(int, stroka.split())). Имея список можно вообще обойтись без цикла. Есть у неё хорошая функция: lst.count(искомое), которая возвращает сколько раз встречается искомое в списке.
Офлайн
73
Yurkofи в чем проблема то?
но проблема в том что входящие данные не обязательно натуральные числа, они могут быть и двузначными и трехзначными
>>> a = '3 5 17 199 323 2400 45 66 87' >>> print(max(a.split(),key = int)) 2400 >>>
data = '5 3 3 5 7 3 1 7 4 7 9 7 7 2 1 7 5 8 8 8 8 9 0' data = [int(i) for i in data.split()] max_el = 0 count_max = 0 index = 0 while data[index]: if data[index] > max_el: max_el = data[index] count_max = 0 if data[index] == max_el: count_max += 1 index += 1 print(count_max)
Офлайн
0
marvellikСпасибо. Уверен что это работает. Пока ничего не понятно, но я постараюсь разобраться. И последний вопрос. А если входящие данные нужно считывать а не заводить сразу по умолчанию, как это сделать? Смотрите, это пример задания с сайта http://pythontutor.ru/lessons/while/problems/seq_num_maximal/ , там 12 вариантов входящих данных, программа должна сама их считать.
Офлайн
73
Yurkofзачем? вам нужно работать с числами а не строками
Таким образом я получаю строку
number = int(input()) max_number = 0 count_ = 0 while number: # то же что и number != 0 if max_number < number: max_number = number count_ = 0 if max_number == number: count_ += 1 number = int(input()) print(count_)
Отредактировано marvellik (Окт. 30, 2018 17:13:45)
Офлайн
857
YurkofНатуральные числа могут быть и стозначными, и тысячезначными; их бесконечное количество. Единственное, их можно пересчитать, поэтому их множество счётно. И любое множество, которому можно сопоставить ряд натуральных чисел, тоже счётно.
входящие данные не обязательно натуральные числа, они могут быть и двузначными и трехзначными
N = {1 2 3 ... n | n -> +inf}>>> def f(seq): ... maxe, n = 0, 0 ... for e in seq: ... if e == 0: ... break ... if e > maxe: ... maxe, n = e, 1 ... elif e == maxe: ... n += 1 ... return (maxe, n) ... >>> f([1, 2, 3, 4, 1, 2, 3, 4, 0]) (4, 2) >>> f([1, 1, 1, 0]) (1, 3) >>> f([0]) (0, 0) >>>
Отредактировано py.user.next (Окт. 31, 2018 00:12:25)
Офлайн
0
marvellikБлагодарю. Понял, разобрался.
Офлайн