Файл: Решение n 1 while n2 n 1 print("Искомое число", n 1) 2.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 934

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Цикл while

1.

Напишите цикл while, который находит максимальное натуральное число, квадрат которого меньше 1000.

Решение

n = 1while n**2 < 1000:n += 1print("Искомое число", n - 1)

2.

Напишите программу, которая считает неотрицательные степени двойки до тех пор, пока это число не станет больше 10 000. В ответ запишите количество итераций, которые проделывает цикл.

Решение

# первоначальное значение счетчикаcount = 0# начальное значение числа 1num = 1#пока степень двойки меньше 10000while num < 10000:#вычисляем следующую степень двойкиnum *= 2#увеличивает счетчик на 1count += 1#печатаем результатыprint(count)print(num)

3.

Олег положил тысячу рублей в банк под 8 % годовых. Через сколько лет у него на счёте будет не менее трёх тысяч рублей? Выведите на экран это число и запишите его в ответ.

Решение.

money = 1000year_count = 0while money < 3000:money = money * 1.08year_count += 1print(year_count)

4.

Найти минимальное число в списке [23, 4, 7, 4, 12, 6, 8, 41, 20]

Решение.

items1 = [23, 4, 7, 4, 12, 6, 8, 41, 20]min_item1 = items1[0]i = 0while i < len(items1):if items1[i] < min_item1:min_item1 = items1[i]i += 1print(min_item1)

Цикл for

1.

Попробуйте теперь самостоятельно подсчитать произведение всех чисел от 1 до N включительно.P = # создаём переменную-счётчик, в которой мы будем считать произведение.#подумайте, чему она должна быть равна N = 5# запишите цикл for для подсчёта произведения

Решение.

P = 1 # заводим переменную счетчик, в которой мы будем считать произведениеN = 5# запишите цикл for для подсчета произведения с правильным диапазономfor i in range(1, N+1):P *= iprint(P)

2.

Напишите программу, которая будет печатать лесенку следующего типа:n = 3******n = 4**********

Решение.

N = 5for i in range(1, N + 1):print("*" * i)

3.

Найти минимальное число в списке [23, 4, 7, 4, 12, 6, 8, 41, 20]

Решение

items2 = [23, 4, 7, 4, 12, 6, 8, 41, 20]min_item2 = items2[0]for item in items2[1:]:if item < min_item2:min_item2 = itemprint(min_item2)

Работа со вложенными циклами

1.

Условие задачи. Д

ана двумерная матрица 3x3 (двумерный массив). Необходимо определить максимум и минимум каждой строки, а также их индексы.

random_matrix = [

[9, 2, 1],

[2, 5, 3],

[4, 8, 5]

]

Решение.

random_matrix = [[9, 2, 1],[2, 5, 3],[4, 8, 5]]min_value_rows = []min_index_rows = []max_value_rows = []max_index_rows = []for row in random_matrix:min_index = 0min_value = row[min_index]max_index = 0max_value = row[max_index]for index_col in range(len(row)):if row[index_col] < min_value: min_value = row[index_col]min_index = index_colif row[index_col] > max_value: max_value = row[index_col]max_index = index_colmin_value_rows.append(min_value)min_index_rows.append(min_index)max_value_rows.append(max_value)max_index_rows.append(max_index)print("Minimal elements:", min_value_rows) # минимальныеэлементыprint("Their indices:", min_index_rows) # ихиндексыprint("Maximal elements:", max_value_rows) # максимальныеэлементыprint("Their indices:", max_index_rows) # ихиндексы

2.

Напишите цикл, который ищет наибольший элемент в матрице.Пример матрицы:test_matrix = [[1, 2, 3], [7, -1, 2],[123, 2, -1]]

Решение.

test_matrix = [[1, 2, 3],[7, -1, 2],[123, 2, -1]]max = test_matrix[0][0] # берем в качестве точки отсчета любой элемент из матрицыfor row in test_matrix:for el in row:# если элемент больше максимального, то это новый максимумif el > max:max = elprint(max)

3.

Напишите код, который определяет, является ли матрица квадратной (то есть количество строк равно количеству столбцов). В конце программа должна выводить на экран значение True или False в зависимости от заданной матрицы. Используйте матрицу из предыдущей задачи.Помните, что количество элементов в каждой строке должно быть одинаковым.

Решение.

test_matrix = [[1, 2, 3],[7, -1, 2],[123, 2, -1]]num_lines = len(test_matrix)cnt = 0for line in test_matrix:if len(line) == num_lines:cnt += 1print(num_lines == cnt)

Break, Continue, Enumerate

Помните, в прошлом модуле мы с вами разбирали, как определить, содержит ли число цифры цифры, 5, 7 или 9:if5in str(num):

✍️ Ваша задача

Напишите алгоритм, который делает то же самое, но работает только с числом, не приводя его в строку.ПодсказкаДля этого вам понадобится цикл while, операции деления на 10 и поиска остатка от деления на 10.Вычисляя остаток от деления на 10, мы получаем крайнюю правую цифру числа, а деля число на 10 — следующее число для итерации.То же можно увидеть на рисунке:

if5in str(num):

Решение.

number = 111115222222222222225digitToFind = 5num = numberwhile num > 0:digit = num % 10if digit == digitToFind:print(f"{digitToFind} is in number {number}")breaknum = int(num / 10)Интересный момент: если замерить скорость выполнения этого решения и сравнить его с предыдущим  if str(digitToFind) in str(number):print(f"{digitToFind} is in number {number}")то оно окажется медленнее. Даже в том случае, когда искомая цифра стоит в самом правой позиции, и несмотря на то, что способ преобразования строки включает полный перевод цифры в строку, а затем поиск по тому, что получилось. СПОСОБ ЧЕРЕЗ ЦИКЛ:4*10-5 секунд, или 0.85 сек на 100000 раз выполнения алгоритма.СПОСОБ ЧЕРЕЗ STR:9*10-6 секунд, или 0.075 на 100000 раз выполнения алгоритма.Почему так? Потому что python — интерпретируемый язык и каждая операция в нём стоит дорого. Преобразование в строку и поиск по результату происходят «внутри» python, как бы одной операцией внутри C-кода интерпретатора python. Наш же алгоритм использует гораздо большее количество операций. Если бы мы реализовывали подобные алгоритмы не на python, а на языке С, Fortran или подобном, то результат был бы обратный: непосредственная работа с числом оказалась бы быстрее. Поэтому, программируя на python, не изобретайте велосипед, пользуйтесь встроенными возможностями языка, библиотеками и другим инструментарием.

Функциональное программирование в Python.

1.

Напишите функцию print_2_add_2, которая будет складывать 2 плюс 2 и печатать этот результат. Не забудьте вызвать функцию, чтобы увидеть результат.

Решение.

defprint_2_add_2():result = 2 + 2print(result)print_2_add_2()

2.

Напишите функцию hello_world, которая будет печать приветственную строку «Hello World».

Решение.

defhello_world():print("Hello World")hello_world()

3.

Напишите функцию, которая проверяет является ли число n, делителем числа a. И выводит на экран соответствующее сообщение, является ли число делителем или нет.

Решение.

defcheck_num(a, n):if a % n == 0:print(f"Число {n} является делителем числа {a}"

)

else:

print(f"Число {n} не является делителем числа {a}")
check_num(4, 2) # Число 2 является делителем числа 4

check_num(5, 2) # Число 2 не является делителем числа 5

4.

Задание на самопроверку.Напишите функцию, которая печатает “обратную лесенку” следующего типа:n = 3******n = 4**********

Решение.

defreverse_stair(n):for i in range(n, 0, -1):print("*" * i)reverse_stair(5)

5.

Напишите функцию, которая будет возвращать количество делителей числа а.Пример ввода: 5Пример вывода программы: 2

Решение.

defget_multipliers(a):count = 0for n in range(1, a + 1):if a % n == 0:count += 1return countget_multipliers(5) # 2get_multipliers(4) # 3

6.

Напишите функцию, которая проверяет, является ли данная строка палиндромом или нет, и возвращается результат проверки. Пример:heck_palindrome("test") # Falsecheck_palindrome("Китнаморенеромантик") # True

Решение

defcheck_palindrome(str_):str_ = str_.lower()str_ = str_.replace(" ", "")if str_ == str_[::-1]:return Trueelse:return Falsecheck_palindrome("test") # Falsecheck_palindrome("Китнаморенеромантик") # True

7.

Написать функцию, которая будет перемножать любое количество переданных ей аргументов.

Решение

defmul(*nums):p = 1for n in nums:p *= nreturn p

8.

С помощью рекурсивной функции найдите сумму чисел от 1 до n.

Решение

defrec_sum(n):if n == 1: # терминальный случайreturn1return n + rec_sum(n - 1) # рекурсивный вызов

9.

С помощью рекурсивной функции развернуть строку.

Решение.

defreverse_str(string):if len(string) == 0:return''else:return string[-1] + reverse_str(string[:-1])reverse_str('test') # tset

10.

Дано натуральное число N. Вычислите сумму его цифр.При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется).

Решение

defsum_digit(n):if n < 10:return nelse:return n % 10 + sum_digit(n // 10)sum_digit(123) # 6

11.

Найти минимальное число в списках. [23, 4, 7, 4, 12, 6, 8, 41, 20]
[5, 4,-12,5,6,7,8,1][54,14,12,15,60,7,8,19]

Решение

def get_min_item(items):min_item = items2[0]for item in items[1:]:if item < min_item:min_item = itemreturn min_itemitems1 = [23, 4, 7, 4, 12, 6, 8, 41, 20]items2 = [5, 4,-12,5,6,7,8,1]items3 = [54,14,12,15,60,7,8,19]min_item1 = get_min_item(items1)min_item2 = get_min_item(items2)min_item3 = get_min_item(items3)print(min_item1)print(min_item2)print(min_item3)

12.

Создайте функцию line, которая принимает атрибут length и возвращает строку из черточек -, повторенных lenght раз.

Пример использования такой функции:

print(line(15))---------------

Решение.

def line(length):for i in range(length + 1):giv = "-" * ireturn givprint(line(15))

13.

Создайте функцию line, которая принимает аргументы fill и length и возвращает строку из символов fill, повторенных lenght раз. Если аргумент length не передан, то символы fill должны повторятся 10 раз.

Пример использования такой функции:

print(line('-', 15))---------------print(line('+'))++++++++++

Решение.

def line(fill, length=""):if not length:giv_1 = fill * 10return giv_1for i in range(length + 1):giv = fill * ii += 1return givprint(line('-', 15))print(line('+'))

14.

Напишите функцию ticket_type, которая получает номер билета в виде строки из шести цифр и возвращает его тип: счастливый, встречный, пьяный или обычный.Счастливым называют такой билет, что сумма первых трех цифр его номера равна сумме последний трех цифр.Встречным называют такой билет, что сумма первых трех цифр его номера отличается на единицу от суммы последних трех цифр.Пьяным называют такой билет, что сумма первых трех цифр его номера отличается на двойку от суммы последних трех цифр.Обычными называют все остальные билеты.

Пример использования функции:

result = ticket_type("123321")print(result)счастливый

Решение

def ticket_type(t_t1):t_t = [int(i) for i in list(str(t_t1))]list(t_t)if sum(t_t[:3]) == sum(t_t[3:]):print("Счастливый")elif (sum((t_t[:3])) - (sum(t_t[3:]))) == 1 or (sum((t_t[:3])) - (sum(t_t[3:]))) == -1:print("Встречный")elif (sum((t_t[:3])) - (sum(t_t[3:]))) == 2 or (sum((t_t[:3])) - (sum(t_t[3:]))) == -2:print("Пьяный")else:print("Обычный")returnresult = ticket_type("123321")result

15.

Давайте попробуем замерить время выполнения системной функции для возведения числа в степень 2 и соответствующего оператора.