Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions lesson02/home_work/hw02_easy.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
__author__ = 'Петров Андрей'

# Задача-1:
# Дан список фруктов.
# Напишите программу, выводящую фрукты в виде нумерованного списка,
Expand All @@ -13,13 +15,47 @@

# Подсказка: воспользоваться методом .format()

fruits = ["яблоко", "банан", "киви", "арбуз"]
i = 1
for fruit in fruits:
print ('{}. {:>6}'.format(i, fruit))
i += 1


# Задача-2:
# Даны два произвольные списка.
# Удалите из первого списка элементы, присутствующие во втором списке.

fruits_one = ["яблоко", "банан", "киви", "арбуз"]
fruits_two = ["яблоко", "абрикос", "ананас", "арбуз"]


for fruit in fruits_two:
if fruit in fruits_one:
fruits_one.remove(fruit)

print('в fruits_one осталось', fruits_one)



# Задача-3:
# Дан произвольный список из целых чисел.
# Получите НОВЫЙ список из элементов исходного, выполнив следующие условия:
# если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два.

from random import randint
i=0
list = []
while i < 10: #генерация случайного списка из целых чисел
list.append(randint(0, 99))
i += 1
print('исходный список', list)

list_new = []

for i in list:
if(i%2 == 0):
list_new.append(i/4)
else:
list_new.append(i*2)
print('новый список', list_new)
96 changes: 89 additions & 7 deletions lesson02/home_work/hw02_hard.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
__author__ = 'Петров Андрей'

# Задание-1: уравнение прямой вида y = kx + b задано в виде строки.
# Определить координату y точки с заданной координатой x.

equation = 'y = -12x + 11111140.2121'
x = 2.5
# вычислите и выведите y

pos_equal = equation.index("=")
pos_x = equation.index("x")
pos_plus = equation.index("+")

k = float(equation[pos_equal+1:pos_x])
b = float(equation[pos_plus+1:])

print('k = {}'.format(k))
print('b = {}'.format(b))
print('y = {}'.format(x * k + b))


# Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'.
# Проверить, корректно ли введена дата.
Expand All @@ -16,13 +29,63 @@
# 4. Длина исходной строки для частей должна быть в соответствии с форматом
# (т.е. 2 символа для дня, 2 - для месяца, 4 - для года)

# Пример корректной даты
date = '01.11.1985'
print(
"Пример корректной даты \n",
"01.11.1985 \n\n",
"Примеры некорректных дат\n",
"01.22.1001\n",
"1.12.1001\n",
"-2.10.3001\n",
"31.06.3001\n",
)


data_lenght = { #справочник длин диапазонов
1: 31,
2: 29,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31,
'year': 9999,
'month': 12
}


date_input = input('Введите дату в формате dd.mm.yyyy: ')

def check_data(dinput):
import re
try:
data_split = list(map(int, dinput.split('.')))
match = re.fullmatch('\d{2}.\d{2}.\d{4}', dinput)

if not(
(data_split[0] <= data_lenght[data_split[1]]) &
(data_split[1] <= data_lenght['month']) &
(data_split[2] <= data_lenght['year']) & (match is not None)
):
return False
else:
return True
except:
return False

while True:
res = check_data(date_input)
if(res):
break
else:
print("Не верный формат!")
date_input = input('Введите дату в формате dd.mm.yyyy: ')


# Примеры некорректных дат
date = '01.22.1001'
date = '1.12.1001'
date = '-2.10.3001'


# Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня)
Expand Down Expand Up @@ -53,4 +116,23 @@
# Выход: 6 2
#
# Вход: 11
# Выход: 5 3
# Выход: 5 3

n = int(input('Номер комнаты: '))

#в условии задачи есть закономерность в кол-ве комнат 1, по 2 комнаты на двух этажах 2х2, по 3 комнаты на трех этажах 3х3.
claster = 1 #Кластер комнат, зная номер кластера можно сказать по сколько комнат на этом этаже
sum_rooms = 1 #Сумма всех комнат в кластерах

while n > sum_rooms: #Перебираем комнаты по кластерам, пока не найдем нужный кластер
claster += 1
sum_rooms += claster ** 2 #порядковый номер кластера в квадрете, к сумме прошдых комнат

max_floor = int((claster + 1) * claster / 2) #Максимальный номер этажа в кластере

dif_rooms = sum_rooms - n #Кол-во пропущенных комнат сверху кластера
floor = max_floor - (dif_rooms // claster) #от последнего этажа кластера вычитаем кол-во пропущенныъ этажей

max_room = claster #максимальное кол-во комнат на этаже равно номеру кластера
room = max_room - dif_rooms % max_room #порядковый номер комнаты, от максимального кол-ва комнат на этаже
print('Этаж {}, номер комнаты слева {}'.format(floor, room))
51 changes: 51 additions & 0 deletions lesson02/home_work/hw02_normal.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
__author__ = 'Петров Андрей'

# Задача-1:
# Дан список, заполненный произвольными целыми числами, получите новый список,
# элементами которого будут квадратные корни элементов исходного списка,
Expand All @@ -6,20 +8,69 @@
# Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2]


test_list = [2, -5, 8, 9, -25, 25, 4]
print('Тестовые данные', test_list)

def isqrt(n): #метод Ньютона
x = n
y = (x + 1) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x

new_list = []

for i in test_list:
if(i == isqrt(i)**2):
new_list.append(isqrt(i))
print('Результат', new_list)

# Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013.
# Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года.
# Склонением пренебречь (2000 года, 2010 года)

date_input = '02.11.2013'

months = ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря']
days = ['первое','второе','третье','четвертое','пятое','шестое','седьмое','восьмое','девятое','десятое','одинадцатое','двенадцатое','тринадцатое','четырнадцатое','пятнадцатое','шестнадцатое','семнадцатое','восемнадцатое','девятнадцатое','двадцатое','двадцать первое','двадцать второе','двадцать третье','двадцать четвертое','двадцать пятое','двадцать шестое','двадцать седьмое','двадцать восьмое','двадцать девятое','тридцатое','тридцать первое']

data = date_input.split('.')
days[int(data[0]) -1], months[int(data[1]) -1], data[2]


print('{} {} {} года. '.format(days[int(data[0]) -1], months[int(data[1]) -1], data[2]))

# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами
# в диапазоне от -100 до 100. В списке должно быть n - элементов.
# Подсказка:
# для получения случайного числа используйте функцию randint() модуля random

n = input('Количество элементов списка: ')

from random import randint
i=0
list = []
while i < int(n): #генерация случайного списка из целых чисел
list.append(randint(-100, 100))
i += 1
print(list)

# Задача-4: Дан список, заполненный произвольными целыми числами.
# Получите новый список, элементами которого будут:
# а) неповторяющиеся элементы исходного списка:
# например, lst = [1, 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 2, 4, 5, 6]
# б) элементы исходного списка, которые не имеют повторений:
# например, lst = [1 , 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 4, 6]

lst = [1, 2, 4, 5, 6, 2, 5, 2]
print(lst)

lst2 = list(set(lst))
print(lst2)

lst3 = []
for i in lst:
if lst.count(i) == 1:
lst3.append(i)
print(lst3)
44 changes: 40 additions & 4 deletions lesson03/home_work/hw03_easy.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,39 @@
__author__ = "Андрей Петров"

# Задание-1:
# Напишите функцию, округляющую полученное произвольное десятичное число
# до кол-ва знаков (кол-во знаков передается вторым аргументом).
# Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0).
# Для решения задачи не используйте встроенные функции и функции из модуля math.

def my_round(number, ndigits):
pass

str_number = str(number)

dot_index = str_number.find(".")
integer_number = str_number[:dot_index]
dec_number = str_number[dot_index+1:]


list_number = [int(i) for i in dec_number] #преобразование в список
j = 0
for k, num, in enumerate(reversed(list_number)): #проход по списку в обратном порядке
if j > 0:
num += 1
j = 0
if (num >= 10) & (len(list_number) - k - 2 >= 0):
list_number[-k-2] += 1
num = num - 10
elif(num >= 10) & (ndigits == 0):
integer_number = int(integer_number) + 1
if k < len(list_number) - ndigits: #До какой точности считаем + 0 и точка
list_number[-k-1] = 0
j = 1 if int(num) > 5 else 0
else:
list_number[-k-1] = num


return int(integer_number) + int(''.join(str(x) for x in list_number))/(10**len(list_number))

print(my_round(2.1234567, 5))
print(my_round(2.1999967, 5))
Expand All @@ -20,9 +47,18 @@ def my_round(number, ndigits):
# !!!P.S.: функция не должна НИЧЕГО print'ить

def lucky_ticket(ticket_number):
pass


#str_number = str(ticket_number)
list_number = [int(i) for i in str(ticket_number)]
lenght = len(list_number)
if(lenght % 2 == 0):
sumone = sum(list_number[:int(lenght / 2)])
sumtwo = sum(list_number[int(lenght / 2):])
return True if sumone == sumtwo else False
else:
sumone = sum(list_number[:int((lenght-1) / 2)])
sumtwo = sum(list_number[int((lenght+1) / 2):])
return sumone == sumtwo

print(lucky_ticket(123006))
print(lucky_ticket(12321))
print(lucky_ticket(436751))
Loading