Как сделать арифметическую прогрессию в питоне
Перейти к содержимому

Как сделать арифметическую прогрессию в питоне

  • автор:

Арифметическая прогрессия

Составить программу вычисления n первых членов арифметической прогрессии, заданных формулой ak+1=ak+d, где a1, k и d запрашиваются при запуске программы При вводе данных: a1 = 1, d = 2, k = 3 Ответ выводит 1 3 5 Написал код, но хотел бы спросить, правильный ли он?

a1 = int(input('Введите первый номер члена a1: ')) d = int(input('Введите разность ар.пр. : ')) k = int(input('Введите последний номер члена k: ')) result = '' #Инициализация переменной с пустым значением for i in range(k): result += str(a1+i*d) + ' ' print('\nВсе члены прогрессии', result) 

Отслеживать
задан 22 дек 2022 в 14:55
user528532 user528532
print(‘\nВсе члены прогрессии’, *range(a1, a1 + d * k, d))
22 дек 2022 в 15:18

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

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

Иначе представьте: вам в дальнейшем придется работать с этой последовательностью, и тогда придется доставать ее из этой строки, что не очень удобно.

Предлагаю написать как-то так, логика работы не меняется, но этот код чуть более архитектурный:

a1 = int(input('Введите первый номер члена a1: ')) d = int(input('Введите разность ар.пр. : ')) k = int(input('Введите последний номер члена k: ')) result = [] for i in range(k): result.append(a1+i*d) print('\nВсе члены прогрессии', ' '.join([str(x) for x in result])) 

Класс range() в Python, генерирует арифметические последовательности

Позволяет создавать последовательности чисел с заданным шагом

Синтаксис:
range(stop) range(start, stop) range(start, stop, step) 
Параметры:
  • start — int , начало последовательности,
  • stop — int , конец последовательности,
  • step — int , шаг последовательности.
Возвращаемое значение:
  • int , последовательность целых чисел, с заданным шагом.
Описание:

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

Последовательности реализуют интерфейс ABC collections.abc.Sequence , и предоставляют такие возможности как проверка вхождения if num in range , обращение к элементу по индексу range[i] , поиск индекса элемента, взятие среза и отрицательную индексацию.

Аргументы конструктора класса range() должны быть целыми числами, или любым объектом, который реализует специальный метод __index__ . Если аргумент шага step опущен, по умолчанию используется значение step=1 . Если аргумент start пропущен, то по умолчанию используется значение start=0 . Если шаг равен нулю step=1 , бросается исключение ValueError .

  • Для положительного шага содержимое диапазона range() определяется по формуле r[i] = start + step*i , где i >= 0 и r[i] < stop
  • Для отрицательного шага содержимое диапазона range() так же определяется по формуле r[i] = start + step*i , но есть ограничения i >= 0 и r[i] > stop .

Объект range() будет пустым, если r[0] не соответствует ограничению значения. Диапазоны поддерживают отрицательные индексы, но они интерпретируются как индексация с конца последовательности, которая определена положительными индексами.

Диапазоны, содержащие абсолютные значения, превышающие допустимые sys.maxsize будут работать, но некоторые функции, например len() , могут вызывать OverflowError .

Проверка range() на равенство при помощи == и != сравнивает их как последовательности. Это означает, что два диапазона равны, если они представляют одинаковую последовательность значений. Обратите внимание, что два равных диапазона могут иметь разные start , stop и step . Например: range(0) == range(2, 1, 3) или range(0, 3, 2) == range(0, 4, 2) .

Преимущество типа данных range над списками list или кортежами tuple в том, что диапазоны range всегда будут занимать небольшое количество памяти, независимо от размера диапазона, которое он представляет, так как он хранит в памяти только значение start , stop и step , а элементы последовательности вычисляется по мере необходимости.

Пример использования range() .

  • Примеры создания арифметических последовательностей;
  • Примеры операций с классом range() ;
  • Пример использования range() в цикле for/in ;
  • Пример использования range() для генерации float значений;

Примеры создания арифметических последовательностей.

# Общие примеры >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(1, 11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(range(0, 30, 5)) [0, 5, 10, 15, 20, 25] >>> list(range(0, 10, 3)) [0, 3, 6, 9] >>> list(range(0, -10, -1)) [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] >>> list(range(0)) [] >>> list(range(1, 0)) [] 

Примеры операций с классом range() .

>>> r = range(0, 20, 2) # Проверка вхождения >>> 11 in r False >>> 10 in r True # Поиск индекса элемента >>> r.index(10) 5 # Обращение к элементу по его индексу >>> r[5] 10 # Срез диапазона >>> r[:5] range(0, 10, 2) >>> r[-1] 18 

Пример использования range() в цикле for/in .

# отсчет с нуля >>> for i in range(0, 5): . print(i) . # 0 # 1 # 2 # 3 # 4 # отсчет с единицы >>> for i in range(1, 6): . print(i) . # 1 # 2 # 3 # 4 # 5 # использование шага в циклах >>> for n, i in enumerate(range(0, 7, 2), 1): . print(f'n>) => i>') . # 1) => 0 # 2) => 2 # 3) => 4 # 4) => 6 # обратный отсчет с шагом в циклах # при помощи класса `range()` >>> for n, i in enumerate(range(-7, 0, 2), 1): . print(f'n>) => abs(i)>') . # 1) => 7 # 2) => 5 # 3) => 3 # 4) => 1 

Пример использования range() для генерации float значений.

Для генерации последовательности чисел с шагом 0.1, необходимо умножить результат функции range() на 0.1, а затем округлить значение при помощи round() (т.к. математика типа float в Python не совсем точная).

>>> for i in range(100): . n = round(i * 0.1, 1) . print(n) . # 0.0 # 0.1 # 0.2 # 0.3 # . # 9.6 # 9.7 # 9.8 # 9.9 

Генерация float с шагом 0.5:

>>> for i in range(0, 30, 5): . n = round(i * 0.1, 1) . print(n) . # 0.0 # 0.5 # 1.0 # 1.5 # 2.0 # 2.5 

Генерация float с шагом 0.02:

>>> for i in range(0, 30, 2): . # умножаем на 0.01 и округляем до . # 2-х значений после запятой . n = round(i * 0.01, 2) . print(n) . # 0.0 # 0.02 # 0.04 # 0.06 # 0.08 # 0.1 # . # 0.22 # 0.24 # 0.26 # 0.28 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Функция abs(), абсолютное значение числа
  • Функция all(), все элементы True
  • Функция any(), хотя бы один элемент True
  • Функция ascii(), преобразует строку в ASCII
  • Функция bin(), число в двоичную строку
  • Класс bool(), логическое значение объекта
  • Функция breakpoint(), отладчик кода
  • Класс bytearray(), преобразует в массив байтов
  • Класс bytes(), преобразует в строку байтов
  • Функция callable(), проверяет можно ли вызвать объект
  • Функция chr(), число в символ Юникода
  • Класс classmethod, делает функцию методом класса
  • Функция compile() компилирует блок кода Python
  • Класс complex(), преобразует в комплексное число
  • Функция delattr(), удаляет атрибут объекта
  • Класс dict() создает словарь
  • Функция dir(), все атрибуты объекта
  • Функция divmod(), делит числа с остатком
  • Функция enumerate(), счетчик элементов последовательности
  • Функция eval(), выполняет строку-выражение с кодом
  • Функция exec(), выполняет блок кода
  • Функция filter(), фильтрует список по условию
  • Класс float(), преобразует в вещественное число
  • Функция format(), форматирует значение переменной
  • Класс frozenset(), преобразует в неизменяемое множество
  • Функция getattr(), значение атрибута по имени
  • Функция globals(), переменные глобальной области
  • Функция hasattr(), наличие атрибута объекта
  • Функция hash(), хэш-значение объекта
  • Функция help(), справка по любому объекту
  • Функция hex(), число в шестнадцатеричную строку
  • Функция id(), идентификатор объекта
  • Функция input(), ввод данных с клавиатуры
  • Класс int(), преобразует в тип int
  • Функция isinstance(), принадлежность экземпляра к классу
  • Функция issubclass(), проверяет наследование класса
  • Функция iter(), создает итератор
  • Функция len(), количество элементов объекта
  • Класс list(), преобразовывает в список
  • Функция locals(), переменные локальной области
  • Функция map(), обработка последовательности без цикла
  • Функция max(), максимальное значение элемента
  • Класс memoryview(), ссылка на буфер обмена
  • Функция min(), минимальное значение элемента
  • Функция next(), следующий элемент итератора
  • Класс object(), возвращает безликий объект
  • Функция oct(), число в восьмеричную строку
  • Функция open(), открывает файл на чтение/запись
  • Функция ord(), число символа Unicode
  • Функция pow(), возводит число в степень
  • Функция print(), печатает объект
  • Класс property(), метод класса как свойство
  • Класс range(), генерирует арифметические последовательности
  • Функция repr(), описание объекта
  • Функция reversed(), разворачивает последовательность
  • Функция round(), округляет число
  • Класс set(), создает или преобразовывает в множество
  • Функция setattr(), создает атрибут объекта
  • Класс slice(), шаблон среза
  • Функция sorted(), выполняет сортировку
  • Декоратор staticmethod(), метод класса в статический метод
  • Класс str(), преобразует объект в строку
  • Функция sum(), сумма последовательности
  • Функция super(), доступ к унаследованным методам
  • Класс tuple(), создает или преобразует в кортеж
  • Класс type(), возвращает тип объекта
  • Функция vars(), словарь переменных объекта
  • Функция zip(), объединить элементы в список кортежей
  • Функция __import__(), находит и импортирует модуль
  • Функция aiter(), создает асинхронный итератор
  • Функция anext(), следующий элемент асинхронного итератора

Как сделать арифметическую прогрессию в питоне

Однажды Петя узнал очень важную последовательность из \(n\) чисел. Тщательно проанализировав ее, он обнаружил, что она является арифметической прогрессией. Чтобы не забыть он записал ее элементы на \(n\) карточках.

Но затем случилась неприятность. Не зная всю важность этой последовательности, его брат Вовочка взял еще \(n\) карточек и написал на них произвольные числа, а потом перемешал все \(2n\) карточек.

Теперь Петя хочет восстановить исходную последовательность по этим карточкам. К сожалению возможно, что это можно сделать несколькими способами, но Петю устроят любые \(n\) чисел, образующие арифметическую прогрессию.

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

Напомним что последовательность \(a_1, a_2, \ldots, a_n\) называется арифметической прогрессией, если \(a_i = a_ + d\) для всех \(i\) от 2 до \(n\) и некоторого \(d\). Число \(d\) называется разностью арифметической прогрессии.

Входные данные

В первой строке входного файла находится целое число \(n\) (\(1 \le n \le 100\,000\)). В следующей строке находится \(2n\) целых чисел по модулю не превосходящих \(10^9\) — числа, написанные на карточках, перечисленные в произвольном порядке. Гарантируется, что можно выбрать \(n\) из них так, чтобы они образовывали арифметическую прогрессию.

Выходные данные

В первой строке выходного файла выведите \(a_1\) и \(d\) — первый элемент и разность найденной арифметической прогрессии. Если \(d = 0\), число \(a_1\) должно встречаться среди заданных чисел \(n\) раз.

Если существует несколько решений, выведите любое.

Как сделать арифметическую прогрессию в питоне

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2024. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *