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

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

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

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

Добавлен: 08.11.2023

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

Скачиваний: 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 и соответствующего оператора.