Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 30, 2018 12:01:20

Yurkof
Зарегистрирован: 2018-09-11
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

Здравствуйте. Есть несколько вопросов по решению следующей задачи:

Последовательность состоит из натуральных чисел и завершается числом 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/

Офлайн

#2 Окт. 30, 2018 12:10:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

Тут хватит только одного цикла и пары переменных.



Офлайн

#3 Окт. 30, 2018 13:54:18

Yurkof
Зарегистрирован: 2018-09-11
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

py.user.next
Тут хватит только одного цикла и пары переменных.
Как можно обойтись только одним циклом? На сколько я понимаю, нам же для начала нужно пройти по всем переменным для того что бы определить максимум, а потом нужно еще раз пройти по всем переменным что бы посчитать сколько максимумов в общем задано. Не понимаю как обойтись одним. Можете подсказать как это сделать, а то я только учусь еще многого не знаю. Буду очень благодарен.

Офлайн

#4 Окт. 30, 2018 14:16:17

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

Элементарно, есть хорошая функция max(что-то_итерируемое). Вычислим максимальное значение без всякого цикла, передав список челочисленных значений. Если числовая последовательность - строка, то её можно разбить и применить к каждому элементу int, например получить список lst = list(map(int, stroka.split())). Имея список можно вообще обойтись без цикла. Есть у неё хорошая функция: lst.count(искомое), которая возвращает сколько раз встречается искомое в списке.

Отредактировано Rafik (Окт. 30, 2018 14:18:36)

Офлайн

#5 Окт. 30, 2018 14:26:55

Yurkof
Зарегистрирован: 2018-09-11
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

Rafik
Элементарно, есть хорошая функция max(что-то_итерируемое). Вычислим максимальное значение без всякого цикла, передав список челочисленных значений. Если числовая последовательность - строка, то её можно разбить и применить к каждому элементу int, например получить список lst = list(map(int, stroka.split())). Имея список можно вообще обойтись без цикла. Есть у неё хорошая функция: lst.count(искомое), которая возвращает сколько раз встречается искомое в списке.

Я уже об этом думал, но проблема в том что входящие данные не обязательно натуральные числа, они могут быть и двузначными и трехзначными, а в таком случае перевод в строку не работает.

Офлайн

#6 Окт. 30, 2018 15:46:32

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

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)

Офлайн

#7 Окт. 30, 2018 16:50:07

Yurkof
Зарегистрирован: 2018-09-11
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

marvellik
Спасибо. Уверен что это работает. Пока ничего не понятно, но я постараюсь разобраться. И последний вопрос. А если входящие данные нужно считывать а не заводить сразу по умолчанию, как это сделать? Смотрите, это пример задания с сайта http://pythontutor.ru/lessons/while/problems/seq_num_maximal/ , там 12 вариантов входящих данных, программа должна сама их считать.
Я додумался только для такого кода:
a=int(input())
s=str(a)
while a!=0:
a=int(input())
s=s+str(a)
print(s)

Таким образом я получаю строку, но если входящие данные двузначные или трехзначные то моя программа абсолютно не работает. Как сделать так что бы программа каждое новое “a” воспринимало как отдельный элемент строки, в не зависимости какое это число 5, 48 или 289 .Вот это не понятно. Не могли бы Вы это подсказать.

Офлайн

#8 Окт. 30, 2018 17:13:20

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

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)

Офлайн

#9 Окт. 31, 2018 00:10:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

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)

Офлайн

#10 Окт. 31, 2018 16:34:26

Yurkof
Зарегистрирован: 2018-09-11
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужно помощь с решением.

marvellik
Благодарю. Понял, разобрался.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version