Python 3. Циклы. Операторы while и for
Задача: Напишите программу, которая вводит два целых числа и находит их произведение, не используя операцию умножения. Учтите, что числа могут быть отрицательными.
a, b = map(int, input().split()) res, s = 0, 1 if bЗадача: Напишите программу, которая вводит натуральное число N и выводит первые N чётных натуральных чисел. Программа должна вывести в одну строчку N первых чётных натуральных чисел, разделив их пробелами.
n = int(input()) for i in range (1,2*n,2): print (i+1)Задача: Напишите программу, которая вводит натуральные числа a и b и выводит сумму квадратов натуральных чисел в диапазоне от a до b.
a, b = map(int, input().split()) if a > b: t = a a = b b = t s = 0 for i in range (a, b+1): s = s+i*i print (s)Задача: Напишите программу, которая вводит четыре натуральных числа (a, b, c и d) и находит все пятизначные числа, которые при делении на a дают в остатке b , а при делении на c дают в остатке d .
Входные данные Первая входная строка содержит два натуральных числа, разделённые пробелами: a и b. Вторая строка содержит натуральные числа c и d, также разделённые пробелом. Гарантируется, что 0 ≤ b ≤ a и 0 ≤ d ≤ c. Выходные данные Программа должна вывести в одну строчку через пробел все пятизначные натуральные числа, которые при делении на a дают в остатке b, а при делении на c дают в остатке d . Если таких чисел нет, программа должна вывести число -1.
x = input().split() y = input().split() a = int(x[0]) b = int(x[1]) c = int(y[0]) d = int(y[1]) if a==0 or c==0: print(-1) else: res = '' for i in range(10000, 99999): if (i%a == b) and (i%c == d): res = res+" "+str(i) res = res.strip() if res == '': print(-1) else: print(res)Задача: Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в K-ю степень (где K – количество цифр в числе) равна самому числу. Например:
153 = 1^3 + 5^3 + 3^3
Напишите программу, которая находит все числа Армстронга на отрезке [a, b].Входные данные: Входная строка содержит два натуральных числа – значения a и b, разделённых пробелами. Гарантируется, что a ≤ b.
Выходные данные: Программа должна вывести в одну строчку все числа Армстронга на отрезке [a, b] , разделив их пробелами. Если таких чисел нет, программа должна вывести число -1.
x = input().split() a = int(x[0]) b = int(x[1]) ''' a = 100 b = 400 ''' if a > b: t = a a = b b = t if aЗадача: Напишите программу, которая считает количество чётных цифр введённого числа.
n = int(input()) n = int(n) k = 0 m = 0 while n>0: if n%2==0: k+=1 else: m+=1 n=n//10 print(k)Задача: Напишите программу, которая определяет, верно ли, что введённое число содержит две одинаковых цифры, стоящие рядом (как, например, 221).
n = int(input()) res = "NO" d1 = 0 d2 = 0 while n > 0: d1 = n%10 d2 = n//10%10 if d1 == d2: res = "YES" n = n//10 print (res)Задача: Напишите программу, которая определяет, верно ли, что введённое число содержит по крайней мере две одинаковых цифры, возможно, не стоящие рядом (как, например, 212). Программа должна вывести слово 'YES', если в числе есть две одинаковые цифры, и слово 'NO', если такой пары цифр нет.
n = int(input()) res = "NO" d1 = 0 d2 = 0 while n>0: d1 = n%10 m = n//10 while m > 0: d2 = m%10 if d1 == d2: res = "YES" m = m//10 n = n//10 print (res)Задача: Модифицированный алгоритм Евклида для вычисления наибольшего общего делителя двух натуральных чисел, формулируется так: нужно заменять большее число на остаток от деления большего на меньшее до тех пор, пока остаток не станет равно нулю; тогда второе число и есть НОД. Напишите программу, которая реализует этот алгоритм.
Входные данные: Входная строка содержит два числа, разделённые пробелом – a и b .
Выходные данные: Программа должна вывести в одной строке два числа: сначала наибольший общий делитель двух введённых чисел, а затем – количество шагов цикла, которые были выполнены.
x = input().split() #Python 3.x a = int(x[0]) b = int(x[1]) n = 0 while a!=0 and b!=0: if a > b: a = a % b else: b = b % a n+=1 print (a+b, n)Задача: Напишите программу, которая вычисляет сумму и произведение целых чисел, поданных на её вход. Ввод заканчивается числом 0.
Входные данные: Во входных строках записаны целые числа, по одному в каждой строке. В последней строке записано число 0.
Выходные данные: Программа должна вывести в одной строке сумму и произведение введённых чисел (не считая завершающий 0), разделив их пробелом.
summ, mul = 0, 1 while 1: c = int(input()) if c == 0: break; summ += c mul *= c print (summ,mul)Задача: Напишите программу, которая вводит натуральное число N и определяет его факториал, то есть произведение натуральных чисел от 1 до N: N! = 1·2·<. >· N.
n = int(input()) f = 1 while n>1: f *= n n -= 1 print (f)Задача: Напишите программу, которая выводит на экран все цифры числа, начиная с первой.
Входные данные: Входная строка содержит натуральное число N.
Выходные данные: Программа должна вывести все цифры введённого числа в одной строке, начиная с первой. Цифры отделяются пробелами.
n = int(input()) res = "" while n>0: res = str(n%10)+ " " + res n = n//10 print (res.strip())Задача: Напишите программу, которая вводит натуральные числа a и b и выводит все простые числа в диапазоне от a до b. Входная строка содержит два натуральных числа: a и b. Гарантируется, что a ≤ b. Программа должна вывести в одной строке через пробел все простые числа на отрезке [a, b]. Если таких чисел нет, программа должна вывести 0.
x = input().split() a = int(x[0]) b = int(x[1]) if a == 0: a = 1 res = "" for i in range(a, b + 1): for j in range(2,i): if i%j == 0: break else: res = res + " " + str(i) if res != '': print (res) else: print (0)Как проверить упорядочены ли числа в питоне
Элементы в новом массиве упорядочены по убыванию или по возрастанию? Если да, то изменить порядок следования элементов
Задача:
Даны 2 целочисленные последовательности a и b размером n. Записать в новый массив элементы из a, которые отсутствуют в массиве b, создать функцию, которая возвращает 1 если число z есть в новом массиве и 0 если нет. Затем проверить: элементы в новом массиве упорядочены по убыванию или по возрастанию? Если да, то изменить порядок следования элементов на обратный.Функция check и изменение порядка следования не реализованы/не до конца реализованы.
Желательно использовать как можно меньше функций и методов, не касается пользовательских функций.def fill(list, n): # Заполнение массивов i = 0 while i < n: list[i] = int(input()) i += 1 def main(list1, list2, list3): # заполнение массива С i = 0 flag = True length_c = 0 while i < n: j = 0 while j < n: if list1[i] == list2[j]: flag = False j += 1 if flag: list3 +=[list1[i]] length_c += 1 flag = True i += 1 def find(list, z): # наличие z в массиве c flag = False for i in list: if z == i: flag = True if flag: print(1) else: print(0) def check(list): # проверка на массива на убывание/возрастание, если истина - return True flag = False for i in range(len(list)-1): num1 = list[i] num2 = list[i+1] if num1 >= num2: flag = True n = int(input('Количество элементов в массивах: \n')) z = int(input('Введите число z \n')) a = [None] * n b = [None] * n c = [] print('Заполняем массив a') fill(a, n) print('Заполняем массив b') fill(b, n) main(a, b, c) find(c, z) # if check(c): # изменение порядка следования элементов на обратный т.е. если уб на возр, возр на уб print(c)Как проверить возрастание цифр в числе? [закрыт]
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.
Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу
Закрыт 1 год назад .
Все числа из последовательности, которые составлены из цифр, идущих по возрастанию необходимо перевернуть и вывести на экран. Пример. Вход: 4 87 129 33 45 Выход: 921 54.
Массивы
Массив (англ. array) - структура данных, хранящая набор значений. Каждое значение из набора индексируется, т.е. значения имеют номера (индексы).
Простейший массив имеет следующий интерфейс
- создать(A, N) -> массив A длины N - создание массива A размера N .
- записать(A, i, x) - записывает значение x в i -ый элемент массива A .
- считать(A, i) -> элемент массива A с индексом i - взятие элемента по индексу (чтение).
- удалить(A) - удаление массива А .
Обычно индексами массива являются целые положительные числа, причём в непрерывном диапазоне. Например, 0, 1, 2. N-2, N-1 , где N - размер массива. В таком случае массив упорядочен по индексу и можно говорить, что массив также является последовательностью.
Для массива операции чтения и записи выполняются за O(1) , т.е. время этих операций не зависит от количества элементов в массиве.
Массив в Python
Массив в Python
упорядоченная изменяемая последовательность. массив хранит множество элементов, которые образуют последовательность. При этом можно изменять как сами элементы массива, так и сам массив: пополнять массив новыми элементами или удалять их. . объектов произвольных типов элементами массива являются Python-объекты. При этом допускается, чтобы в одном массиве хранились объекты разных типов.
Массивы в Python также называют списками или листами (англ. list). Терминология в других языках программирования, а также в теории алгоритмов может быть другая.
Список Python является гибким в использовании объектом. Как инструмент, программист может использовать списки, например, для создания элементов линейной алгебры: точек, векторов, матриц, тензоров. Или, например, для таблицы с некоторыми данными.
Важно заметить, что , питоновский список, является универсальной структурой данных. В том числе, ей можно пользоваться как массивом (что мы и будем делать)! То есть, у этого объекта есть интерфейс, описанный в предыдущем разделе, причём с теми же асимптотиками, хотя возможности выходят гораздо за пределы простейшего массива.
Создание массива
Литерал массива
Массив можно создать при помощи литералов. Литерал - это код, который используется для создания объекта "вручную" (задания константы). Например, некоторые литералы уже изученных ранее объектов:
- int : 5 , -23
- float : 5. , 5.0 , -10.81 , -1.081e1
- str : 'ABCdef' , "ABCdef"
В случае массива литералом являются квадратные скобки [] , внутри которых через запятую , перечисляются элементы массива:
>>> [] [] >>> [0, 1, 2, 3, 4] [0, 1, 2, 3, 4] >>> ['sapere', 'aude'] ['sapere', 'aude'] >>> ['Gravitational acceleration', 9.80665, 'm s^-2'] ['Gravitational acceleration', 9.80665, 'm s^-2'] >>> type([0, 1, 2, 3, 4])
Создание массива заданной длины, склеивание массивов
Чтобы создать массив наперёд заданной длины, нужно задать инициализируещее значение и длину. Ниже создаётся массив, содержащий 10 нулей.
>>> A = [0] * 10 >>> A [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] >>> type(A)
С похожим синтаксисом мы сталкивались при работе со строками. Массивы в Python можно "склеивать" с помощью знака сложения:
>>> A = [0] * 3 # [0, 0, 0] >>> B = [1] * 3 # [1, 1, 1] >>> C = [2] * 3 # [2, 2, 2] >>> D = A + B + C >>> D [0, 0, 0, 1, 1, 1, 2, 2, 2]
На самом деле, умножение массива на целое число M это создание нового массива путём M "склеиваний" исходного массива с самим собой:
>>> [0, 1] * 3 [0, 1, 0, 1, 0, 1] >>> [0, 1] + [0, 1] + [0, 1] [0, 1, 0, 1, 0, 1]
Элементы массива: доступ и изменение
Выше мы убедились, что массив это множество объектов различных типов, теперь убедимся, что это упорядоченная последовательность изменяемых объектов.
Доступ по индексу
Для доступа к элементам массива используется операция взятия элемента по индексу. Для этого рядом с литералом или переменной массива необходимо подписать индекс элемента в квадратных скобках:
>>> ['Gravitational acceleration', 9.80665, 'm s^-2'][0] 'Gravitational acceleration' >>> ['Gravitational acceleration', 9.80665, 'm s^-2'][1] 9.80665 >>> ['Gravitational acceleration', 9.80665, 'm s^-2'][2] 'm s^-2' >>> l = [10, 20, 30] >>> l[0] 10 >>> l[1] 20 >>> l[2] 30
Нумерация элементов массива начинается с нуля.
При запросе элемента по несуществующему индексу, Python вызовет ошибку IndexError:
>>> l [10, 20, 30] >>> l[3] Traceback (most recent call last): File "", line 1, in IndexError: list index out of range
Поэтому всегда нужно быть уверенным, что индексация не выходит за пределы длины массива. Получить её можно с помощью функции len() :
>>> l [10, 20, 30] >>> len(l) 3 >>> l[len(l) - 1] 30
Последняя конструкция встречается нередко, поэтому в Python существует возможность взять элемент по отрицательному индексу:
>>> l [10, 20, 30] >>> l[-1] 30 >>> l[-2] 20 >>> l[-3] 10 >>> l[-4] Traceback (most recent call last): File "", line 1, in IndexError: list index out of range
Таким образом для индекса n ≥ 0, l[-n] эвивалентно l[len(l) - n] .
Изменение элементов
Изменение элементов осуществляется с помощью присваивания:
>>> l = [10, 20, 30] >>> l [10, 20, 30] >>> l[0] = 0 >>> l [0, 20, 30] >>> l[2] = 55 >>> l [0, 20, 55]
Доступ в цикле while
>>> l [0, 20, 55] >>> i = 0 >>> while i len(l): . print(i, l[i]) . i += 1 . 0 0 1 20 2 55 >>>
Доступ в цикле for
Наиболее универсальный способ это использование генератора range:
>>> l [0, 20, 55] >>> for i in range(len(l)): . print(i, l[i]) . 0 0 1 20 2 55
Печать массива
Чтобы распечатать элементы массива в столбец, воспользуйтесь циклом for , как в разделе выше.
Если нужно распечатать массив в строку, то воспользуйтесь функцией print :
>>> A = [0, 1, 2, 3] >>> print(*A) 0 1 2 3
Здесь знак * это операция развёртывания коллекции по аргументам функции. Функция print принимает на вход сколько угодно аргументов и действие выше эквиваленто следующему:
>>> print(A[0], A[1], A[2], A[3]) 0 1 2 3
Ремарка о строках
На самом деле, мы уже ранее сталкивались с массивами в предудыщих лабораторных, когда использовали строковый метод str.split :
>>> s = "ab cd ef1 2 301" >>> s.split() ['ab', 'cd', 'ef1', '2', '301']
Т.е. str.split , по умолчанию, разбивает строку по символам пустого пространства (пробел, табуляция) и создаёт массив из получившихся "слов".
Загляните в help(str.split) , чтобы узнать, как изменить такое поведение, и разбивать строку, например, по запятым, что является стандартом для представления таблиц в файлах csv (comma separated values).
Методом, являющимся обратным к операции str.split является str.join . Он "собирает" строку из массива строк:
>>> s 'ab cd ef1 2 301' >>> l = s.split() >>> l ['ab', 'cd', 'ef1', '2', '301'] >>> l[-1] = '430' >>> l ['ab', 'cd', 'ef1', '2', '430'] >>> ','.join(l) 'ab,cd,ef1,2,430' >>> ' -- '.join(l) 'ab -- cd -- ef1 -- 2 -- 430'
Работа с двумерными массивами
Как вам рассказали, в массиве мы можем хранить различные данные. В том числе в ячейке массива можем хранить другой массив. Давайте предположим, что в каждой ячейке массива размера N у нас будет храниться другой массив размера M . Таким образом мы можем построить таблицу или матрицу размера N x M .
Создание двумерного массива (матрицы) размера N x M в питоне:
a = [] for _ in range(n): a.append([0] * m)
a = [[0] * m for _ in range(n)]
Обращение к элементами двумерного массива:
a[i][j] = 5