Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/48: Рейтинг темы: голосов - 48, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101

Определите значение второго по величине элемента последовательности

27.02.2020, 21:46. Показов 11873. Ответов 166
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь научиться языку Питон-3, просмотрел некоторые поверхностные курсы по языку, вроде все понятно, но когда к примеру стал проходить курс с заданиями вот здесь https://www.coursera.org/learn... -maksimumu то до цикла While дополз, но когда посыпались задания типа: Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности, то есть элемента, который будет наибольшим, если из последовательности удалить одно вхождение наибольшего элемента. плюс всякие числа Фабиочи, то я поплыл...
понятно, что код можно загуглить, НО какой толк от такой учебы...?
вот стою перед выбором, бросать все это программирование т.к. моих мозгов и логики мышления не хватает на это или бросать этот курс, что посоветуете?...
для меня это очень важно...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2020, 21:46
Ответы с готовыми решениями:

Определить значение второго по величине элемента в последовательности
Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой...

Определить значение второго по величине элемента в данной последовательности
Задача звучит так: Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по...

Определите значение второго по величине элемента в последовательности
Написать программу на С++, используя циклы for и/или while, можно использовать if. Последовательность состоит из различных натуральных...

166
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
14.03.2020, 20:30  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Viktorrus Посмотреть сообщение
2
n = int(input())
print(sum([(x ** 3) for x in range(1, n + 1)]))
а зачем здесь range(1, ?
range(n + 1) вполне же работает..

Добавлено через 57 секунд
Цитата Сообщение от Viktorrus Посмотреть сообщение
n = int(input())
print(sum([(x ** 3) for x in range(1, n + 1)]))
ну да, этот вариант намного сложнее для понимания

Добавлено через 51 минуту
а вот если усложнить немного, что бы найти факториал то уже даже смотря на код готовый, непонятно..
Python
1
2
3
4
5
6
n = int(input())
f = 1
while n > 1:
    f = f * n # f = 1 * 3 == 3
    n = n - 1 # n = 3 - 1 == 2
print(f) # почему f == 6 не понятно как получается
Добавлено через 15 минут
если через список, то не понятно почему (2, ...) с 2ки начинается.. сам бы то же такое не додумался написать..

Python
1
2
3
4
5
n = int(input())
S = 1
for i in range(2, n+1):
    S = S * i
print(S)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
14.03.2020, 22:22
Цитата Сообщение от coa3 Посмотреть сообщение
а зачем здесь range(1, ?
range(n + 1) вполне же работает..
Да работает, потому что ноль в кубе (0 ** 3) равен нулю и на результат суммы не влияет. Но в условии говорится просуммировать кубы чисел от 1 до n, поэтому строго следуя этому условию я беру начиная с единицы. Хотя результат будет один и тот же.
Цитата Сообщение от coa3 Посмотреть сообщение
если через список, то не понятно почему (2, ...) с 2ки начинается..
По той же причине, что и в примере выше работают два варианта. Так как факториал, это произведение, то сомножитель единицу (1*2*3*4...) спереди можно отбросить и начинать с двойки (2*3*4...), на результат это никак не повлияет.

Добавлено через 46 минут
Рассмотрим пример вычисления факториала с помощью цикла while. Факториал равен 6 при n=3, так как f = 1*2*3 равно 6.
Python
1
2
3
4
5
6
n = int(input())
f = 1
while n > 1:
    f = f * n # f = 1 * 3 == 3
    n = n - 1 # n = 3 - 1 == 2
print(f)
Начинаем мы с того, что задаем значение переменной f в которой будет аккумулироваться произведение всех сомножителей факториала. Переменной f присваиваем значение 1, которое не будет влиять на вычисление факториала, который является произведением. В условии цикла мы пишем n > 1 , то есть цикл будет выполнятся для всех чисел начиная от начального значения n (в данном случае 3) и которые больше единицы 1. То есть для чисел (3, 2,).
n в цикле одновременно используется как счетчик, но не возрастающий, а убывающий (3, 2, 1). Но когда n станет равным единице 1, то цикл прервется.
И так при первом проходе: n == 3, условие выполняется и выполняется проход цикла f = f * n # f = 1 * 3 == 3, счетчик уменьшается на единицу n = n - 1 # n = 3 - 1 == 2
При втором проходе: n == 2, условие выполняется и выполняется второй проход где f уже равно 3 и потому получим
f = f * n # f = 3 * 2 == 6, счетчик уменьшается на единицу n = n - 1 # n = 2 - 1 == 1
Так как n теперь равно единице 1 , то условие цикла уже не будет выполнятся и следующего прохода не будет, цикл прервется. При этом f останется равным шести, f == 6 , что и будет выведено на экран инструкцией print(f), которая находится за пределами цикла и будет выполнена после того, как цикл прервется.
1
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
14.03.2020, 22:35  [ТС]
по while очень хорошо расписали, спасибо!

а по вот этому
Python
1
2
3
4
5
n = int(input())
S = 1
for i in range(1, n+1):
    S = S * i
print(S)
можно об S u об i рассказать, почему надо было ввести переменную S и почему надо было умножать на i к примеру, а не на n?..
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
14.03.2020, 23:23
Цитата Сообщение от coa3 Посмотреть сообщение
а по вот этому
Python
1
2
3
4
5
n = int(input())
S = 1
for i in range(1, n+1):
    S = S * i
print(S)
Рассмотрим так же на примере, когда n=3. На протяжении всей программы n не меняется и остается равным в данном случае трем (3). Если мы при каждом проходе будем умножать на n , то получим 1*n*n == 1*3*3 == 9 , что дает не верный ответ.
Для вычисления факториала мы должны последовательно умножать результат S на очередной сомножитель, из (1, 2, 3). Итерируемый объект, который формируется функцией range(1, n+1) содержит в себе числа (1, 2, 3), которые он выдает по одному в переменную цикла i при каждом шаге цикла.
S мы ввели, потому что без заранее заданного значения S не будет работать формула S = S * i , так как не возможно будет вычислить правую часть инструкции "=". А присвоили единицу, что бы она не влияла на результат произведения сомножителей факториала.

Добавлено через 11 минут
coa3, Я не знаю, про итераторы ты читал или нет, потому что строго говоря функция range(1, n+1) создает объект range
Python
1
2
3
4
5
>>> range(n)
range(0, 5)
>>> I = range(n)
>>> type(I)
<class 'range'>
, из которого цикл for создает итератор, который по запросу цикла при каждом новом шаге передает в переменную цикла i по одному значению. когда все элементы в итераторе заканчиваются, он выдает стандартное сообщение об ошибке, в ответ на которое цикл for заканчивается и управление передается следующей за циклом инструкции, если она есть. Если ее нет, то программа заканчивает работу стандартным образом (как успешно выполненная).

Добавлено через 1 минуту
Если про итераторы еще не читал, то пока не бери в голову.
1
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
14.03.2020, 23:25  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
потому что строго говоря функция range(1, n+1)
в данном случае я решил, что надо писать range(1, n +1) т.к. если написать range(1, n) то при n = 3 будет список [1, 2], что не удовлетворяет заданию т.к. не хватает цифры 3 и только n + 1 добавляет следующую цифру в список и получается [1, 2, 3]
так? об этом речь?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
14.03.2020, 23:36
Цитата Сообщение от coa3 Посмотреть сообщение
в данном случае я решил, что надо писать range(1, n +1)
Правильно решил, так как функция range(n) не берет само значение n. Это нужно, так как счет в питоне идет с нуля и в этом случае мы получаем нужное количество элементов. При n равном 3 получим три элемента (0, 1, 2). Если нам нужно начинать с единицы, то что бы получить три элемента мы должны написать range(1, n+1). Тогда получим (1, 2, 3).
1
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
16.03.2020, 15:39  [ТС]
Посчитать сколько символов в строке являются цифрами и их сумму
Python
1
2
3
4
5
6
7
n = input()
sum = 0
if n == str(n):
    sum1 = sum + 0
else:
    sum = sum + int(n)
    print(sum)
никакие простые варианты, как это сделать ни лезут..
во первых как вводятся эти символы, а потом сортировка их на str и на все остальные...
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.03.2020, 17:14
coa3, Алгоритм здесь такой. Нужно рассмотреть все символы в строке (которая является последовательностью символов) и для тех из них, которые являются цифрами, найти их сумму. Нужно рассматривать по одному символу и если это не цифра то ничего не делать с ним, а если это цифра, то прибавлять к сумме. Для этого использовать цикл, лучше for.
Для проверки, является ли символ цифрой, используй метод
Python
1
str. isdigit() -> bool
Возвращает флаг, указывающий на то, содержит ли строка только цифры.
Вернёт True, если в строке хотя бы один символ и все символы строки являются цифрами, иначе — False.
Python
1
2
3
4
>>> S = '5' 
>>> T = 'x' 
>>> S.isdigit(), T.isdigit() 
(True, False)
Попробуй сначала сам написать код с циклом, если что я подправлю.

Добавлено через 8 минут
И еще, когда отлаживаешь код, не нужно делать ввод с клавиатуры. Пока закомментируй ее.
Python
1
#n = input()
Присвой переменной какую либо тестовую строку и с ней отлаживай. Так быстрее отлаживать. Когда все отладишь, тогда попробуй ввод с клавиатуры.
1
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
16.03.2020, 18:58  [ТС]
Python
1
2
3
4
5
6
7
8
#n = input()
x = 'uhyfrfyjko55ygh5jn'
n = list(x)
i = 0
for s in n:
    if s.isdigit():
        i = i + s
        print(i)
Цитата Сообщение от Viktorrus Посмотреть сообщение
Для этого использовать цикл, лучше for.
т.к. for еще не разбирал здесь, то...
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.03.2020, 20:21
coa3, Уже есть прогресс, но в коде есть ошибки, давай их разберем.
Во первых чисто косметически, обычно через i обозначают переменную цикла, ассоциирующуюся с шагом цикла. В данном случае берутся символы из строки, поэтому переменную цикла лучше назвать ch (сокращение от character). А переменную суммы лучше назвать s (первая буква от sum). Но это только для лучшей читаемости, на работу кода это не влияет. А теперь об ошибках. Строка это последовательность символов и потому является итерируемым объектом. Поэтому преобразование ее в список является лишним.
Но собственно самих главных ошибок, почему код не работает, их две.
Первая это то, что переменная цикла получает на каждом шаге строку из одного символа, и если этот символ цифра, то что бы ее прибавлять к сумме, нужно преобразовать этот символ в число с помощью функции int().
Вторая ошибка, это то, что печатать сумму нужно за пределами цикла, когда он закончится. А как у тебя, печатать будет не только конечную сумму, а также все промежуточные значения суммы при каждом шаге цикла, так как print() размещен у тебя внутри тела цикла.
А вот как выглядит правильный код
Python
1
2
3
4
5
6
7
8
#n = input()
x = 'uhyfrfyjko55ygh5jn'
s = 0
for ch in x:
    if ch.isdigit():
        s = s + int(ch)
 
print(s)
Добавлено через 6 минут
Кстати, ты используешь отладчик при написании кода? Он показывает твои ошибки.
1
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
16.03.2020, 20:21  [ТС]
так писал код чисто интуитивно, не особо разбираясь, что пишу, оказалось код получился почти рабочим, ну за исключением int и print не туда влепил...
неужели мозги чуть чуть начинают в правильном направлении работать...?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.03.2020, 20:26
coa3, Постепенно с изучением все большего количества инструкций и с практикой будешь все лучше писать.
0
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
16.03.2020, 20:29  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Постепенно с изучением все большего количества инструкций и с практикой будешь все лучше писать
просто не верится в такое чудо..
скажите, а как вводить с клавиатуры сразу список?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.03.2020, 20:53
Цитата Сообщение от coa3 Посмотреть сообщение
скажите, а как вводить с клавиатуры сразу список?
Все, что вводится с клавиатуры, питон возвращает в качестве одной строки. Дальше все зависит от того, как выглядит строка, имеет ли она пробелы. Если да, то используется метод split(), который разбивает на строки по пробелам или по другим символам.
Python
1
2
3
4
5
6
7
8
9
str.split(sep=None, maxsplit=-1) -> list
 
sep - Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов. (по умолчанию  строка разбивается на группы по символам пробела, табуляции или перевода строки)
Пробельные символы — это набор символов, а не только сам символ пробела.
К ним относятся: возврат каретки, перевод строки, табуляция, и различные виды пробелов.
 
maxsplit - Максимальное количество разбиений, которое требуется выполнить. Если -1, то количество разбиений не ограничено.
 
list - список текстовых строк
Сразу поясню, в среди параметров функции могут быть именные (значения по умолчанию). Если ты не присваиваешь им свои значения, то их указывать не нужно.
Python
1
2
3
>>> S = 'aaa, bbb, ccccc, dd'
>>> S.split(',')
['aaa', 'bbb', 'ccccc', 'dd']
Если же ты вводишь строку без разделителей, то преобразовать ее в список символов можно уже после ввода с помощью функции
Python
1
list([iterable]) -> list
Как сделал ты в своем примере. Но при наличии пробелов в строке в этом случае у тебя в списке вместо пробелов будут в виде элементов списка пустые строки '' .
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.03.2020, 20:57
Цитата Сообщение от coa3 Посмотреть сообщение
а как вводить с клавиатуры сразу список?
Список вводится как строка с регламентированным (тот, кто вводит, должен договориться с тем, кто читает) разделителем. Затем строка разделяется по нему методом s.split("разделитель").

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> lst = "1,2,3,4".split(',')
>>> lst
['1', '2', '3', '4']
>>>  # если нам нужны числа как числа, то применяем доп. преобразование.
>>> lst = list(map(int,"1,2,3,4".split(',')))
>>> lst
[1, 2, 3, 4]
>>>
>>> # непосредственно ввод
>>> lst = list(map(int,input("Введите список целых чисел через запятую:>>").split(',')))
Введите список целых чисел через запятую:>>1,2,3,4,5
>>> lst
[1, 2, 3, 4, 5]
>>>
P.S. Пардон, не обновил страницу и не видел, что Viktorrus уже все описал.
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.03.2020, 21:05
Вот пример
Python
1
2
n = input().split()
print(n)
Выведет
Python
1
2
qq rrr абц
['qq', 'rrr', 'абц']
Добавлено через 2 минуты
Цитата Сообщение от Garry Galler Посмотреть сообщение
не видел, что Viktorrus уже все описал
Я дал синтаксис но не дал пример такого ввода, Вы все подробно описали на примере.
1
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
17.03.2020, 14:14  [ТС]
Найти в списке число, которое встречается чаще всего

дальше понимаю что надо применять s.count()
и через max() найти максимально повторяющийся объект
но в скобки count надо поместить конкретный элемент, как поместить все элементы списка по очередно не могу придумать, как голову не ломал...
такое понятно не работает...
Python
1
2
3
s = input().split()
x = s.count
print(max(x))
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
17.03.2020, 18:42
coa3, Наиболее эффективно для таких задач использовать метод Counter из модуля collections. Ты модули еще не изучал, но для предварительного ознакомления рассмотрим решение этим способом позже (пример такого решения здесь
Вывести элементы списка, которые встречаются только один раз ).
А сначала для практики решим этот пример используя count().
Так как count() ищет количество вхождений для одного элемента, то что бы проверить количество вхождений для каждого элемента, очевидно нужно использовать цикл for.
Для поиска числа с максимальным вхождением инициализируем перед циклом переменную, значением которой является пара, у которой первым элементом является число из списка, для которого на текущий момент мы выявили наибольшее количество вхождений, а вторым элементом пары будет его количество вхождений. Для инициализации можно присвоить пару нулей.
m = (0, 0)
Затем в цикле для каждого элемента из списка находим количество его вхождений и затем если их число больше чем в m то заносим проверенный элемент в первую позицию пары (смещение 0), а его количество вхождений во вторую позицию пары (смещение 1).
Напиши код как получится и мы его разберем.

Добавлено через 7 минут
Для образца работы с парой
Python
1
2
3
4
5
6
>>> m = (0, 0)
>>> i = 3
>>> k = 5
>>> m = (i, k)
>>> m
(3, 5)
0
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
18.03.2020, 16:14  [ТС]
параллельно пытаюсь решить другую задачку, что бы мозги переключить с того, что не получается...
#Дана строка, в которой буква h встречается минимум два раза.Удалите из этой строки первое и
# последнее вхождение буквы h,а также все символы, находящиеся между ними.
Python
1
2
3
4
5
a = 'ghggvghkk'
b, c = (a.find('h')), (a.rfind('h'))
c += 1
del a[int(b):int(c)]
print(a)
"Борюсь" с функцией del, не хочет меня слушать, как с этим совладать?..
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
18.03.2020, 16:23
coa3, del a[int(b):int(c)] это означает удалить срез строки от (x, y), то бишь ты получаешь срез и удаляешь его, бегом учить основы!

Добавлено через 2 минуты
Python
1
2
3
4
5
6
# -*- coding: utf-8 -*-
 
 
a = 'ghggvghkk'
b, c = a.find('h'), a.rfind('h')
print(a[b+1:c])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2020, 16:23
Помогаю со студенческими работами здесь

Определите значение второго по величине элемента в последовательности
Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой...

Определите значение второго по величине элемента в последовательности
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой...

Определите значение второго по величине элемента в этой последовательности
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой...

(использовать рекурсию) Определите значение второго по величине элемента в этой последовательности
3. (использовать рекурсию) Дана последовательность натуральных чисел (одно число в строке), завершающаяся числом 0. Определите значение...

Определите значение второго по величине элемента последовательности рекурсией без циклов
Дана последовательность натуральных чисел (одно число в строке), завершающаяся числом 0. Определите значение второго по величине ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Закрытая тема Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru