Файл: Решение n 1 while n2 n 1 print("Искомое число", n 1) 2.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.11.2023
Просмотров: 534
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Цикл while
1.
Напишите цикл while, который находит максимальное натуральное число, квадрат которого меньше 1000.
Решение
n = 1
while n**2 < 1000:
n += 1
print("Искомое число", n - 1)
2.
Напишите программу, которая считает неотрицательные степени двойки до тех пор, пока это число не станет больше 10 000. В ответ запишите количество итераций, которые проделывает цикл.
Решение
# первоначальное значение счетчика
count = 0
# начальное значение числа 1
num = 1
#пока степень двойки меньше 10000
while num < 10000:
#вычисляем следующую степень двойки
num *= 2
#увеличивает счетчик на 1
count += 1
#печатаем результаты
print(count)
print(num)
3.
Олег положил тысячу рублей в банк под 8 % годовых. Через сколько лет у него на счёте будет не менее трёх тысяч рублей? Выведите на экран это число и запишите его в ответ.
Решение.
money = 1000
year_count = 0
while money < 3000:
money = money * 1.08
year_count += 1
print(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 = 0
while i < len(items1):
if items1[i] < min_item1:
min_item1 = items1[i]
i += 1
print(min_item1)
Цикл for
1.
Попробуйте теперь самостоятельно подсчитать произведение всех чисел от 1 до N включительно.
P = # создаём переменную-счётчик, в которой мы будем считать произведение.
#подумайте, чему она должна быть равна
N = 5
# запишите цикл for для подсчёта произведения
Решение.
P = 1 # заводим переменную счетчик, в которой мы будем считать произведение
N = 5
# запишите цикл for для подсчета произведения с правильным диапазоном
for i in range(1, N+1):
P *= i
print(P)
2.
Напишите программу, которая будет печатать лесенку следующего типа:
n = 3
*
**
***
n = 4
*
**
***
****
Решение.
N = 5
for 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 = item
print(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 = 0
min_value = row[min_index]
max_index = 0
max_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_col
if row[index_col] > max_value:
max_value = row[index_col]
max_index = index_col
min_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 = el
print(max)
3.
Напишите код, который определяет, является ли матрица квадратной (то есть количество строк равно количеству столбцов). В конце программа должна выводить на экран значение True или False в зависимости от заданной матрицы. Используйте матрицу из предыдущей задачи.
Помните, что количество элементов в каждой строке должно быть одинаковым.
Решение.
test_matrix = [[1, 2, 3],
[7, -1, 2],
[123, 2, -1]]
num_lines = len(test_matrix)
cnt = 0
for line in test_matrix:
if len(line) == num_lines:
cnt += 1
print(num_lines == cnt)
Break, Continue, Enumerate
Помните, в прошлом модуле мы с вами разбирали, как определить, содержит ли число цифры цифры, 5, 7 или 9:
if ‘5’ in str(num):
✍️ Ваша задача
Напишите алгоритм, который делает то же самое, но работает только с числом, не приводя его в строку.
Подсказка
Для этого вам понадобится цикл while, операции деления на 10 и поиска остатка от деления на 10.
Вычисляя остаток от деления на 10, мы получаем крайнюю правую цифру числа, а деля число на 10 — следующее число для итерации.
То же можно увидеть на рисунке:
if ‘5’ in str(num):
Решение.
number = 111115222222222222225
digitToFind = 5
num = number
while num > 0:
digit = num % 10
if digit == digitToFind:
print(f"{digitToFind} is in number {number}")
break
num = 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 и печатать этот результат. Не забудьте вызвать функцию, чтобы увидеть результат.
Решение.
def print_2_add_2():
result = 2 + 2
print(result)
print_2_add_2()
2.
Напишите функцию hello_world, которая будет печать приветственную строку «Hello World».
Решение.
def hello_world():
print("Hello World")
hello_world()
3.
Напишите функцию, которая проверяет является ли число n, делителем числа a. И выводит на экран соответствующее сообщение, является ли число делителем или нет.
Решение.
def check_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
****
***
**
*
Решение.
def reverse_stair(n):
for i in range(n, 0, -1):
print("*" * i)
reverse_stair(5)
5.
Напишите функцию, которая будет возвращать количество делителей числа а.
Пример ввода: 5
Пример вывода программы: 2
Решение.
def get_multipliers(a):
count = 0
for n in range(1, a + 1):
if a % n == 0:
count += 1
return count
get_multipliers(5) # 2
get_multipliers(4) # 3
6.
Напишите функцию, которая проверяет, является ли данная строка палиндромом или нет, и возвращается результат проверки. Пример:
heck_palindrome("test") # False
check_palindrome("Кит на море не романтик") # True
Решение
def check_palindrome(str_):
str_ = str_.lower()
str_ = str_.replace(" ", "")
if str_ == str_[::-1]:
return True
else:
return False
check_palindrome("test") # False
check_palindrome("Кит на море не романтик") # True
7.
Написать функцию, которая будет перемножать любое количество переданных ей аргументов.
Решение
def mul(*nums):
p = 1
for n in nums:
p *= n
return p
8.
С помощью рекурсивной функции найдите сумму чисел от 1 до n.
Решение
def rec_sum(n):
if n == 1: # терминальный случай
return 1
return n + rec_sum(n - 1) # рекурсивный вызов
9.
С помощью рекурсивной функции развернуть строку.
Решение.
def reverse_str(string):
if len(string) == 0:
return ''
else:
return string[-1] + reverse_str(string[:-1])
reverse_str('test') # tset
10.
Дано натуральное число N. Вычислите сумму его цифр.
При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется).
Решение
def sum_digit(n):
if n < 10:
return n
else:
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 = item
return min_item
items1 = [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 = "-" * i
return giv
print(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 * 10
return giv_1
for i in range(length + 1):
giv = fill * i
i += 1
return giv
print(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("Обычный")
return
result = ticket_type("123321")
result
15.
Давайте попробуем замерить время выполнения системной функции для возведения числа в степень 2 и соответствующего оператора.