forked from pablorus/Python_lessons_basic
-
Notifications
You must be signed in to change notification settings - Fork 447
Expand file tree
/
Copy pathhw02_hard.py
More file actions
120 lines (101 loc) · 5.34 KB
/
hw02_hard.py
File metadata and controls
120 lines (101 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
__author__ = 'Зиновьев Максим Игоревич'
import datetime
# Задание-1: уравнение прямой вида y = kx + b задано в виде строки.
# Определить координату y точки с заданной координатой x.
# Я напишу программу строго по условию, то-есть уравнение всегда задаётся по шаблону, шаг впрао, шаг в лево и fatalError
# при необходимости можно накрутить проверок, но на 2 и 3 задание ушло слишком много сил
# y = -12x + 11111140.2121
# x = 2.5
equation = input('1. Введите уравнение прямой: ')
posX = equation.find('x')
k = float(equation[4:posX])
b = float(equation[posX + 4:])
x = float(input('Введите кординату x: '))
y = k * x + b
print('Кордината y: ', y)
# Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'.
# Проверить, корректно ли введена дата.
# Условия корректности:
# 1. День должен приводиться к целому числу в диапазоне от 1 до 30(31)
# (в зависимости от месяца, февраль не учитываем)
# 2. Месяц должен приводиться к целому числу в диапазоне от 1 до 12
# 3. Год должен приводиться к целому положительному числу в диапазоне от 1 до 9999
# 4. Длина исходной строки для частей должна быть в соответствии с форматом
# (т.е. 2 символа для дня, 2 - для месяца, 4 - для года)
# Пример корректной даты
#date = '01.11.1985'
# Примеры некорректных дат
#date = '01.22.1001'
#date = '1.12.1001'
#date = '-2.10.3001'
while True:
userAnswer = input('Введите дату')
if userAnswer.find('.') != 2:
print('Ошибочный формат даты, введите dd.mm.yyyy')
continue
elif userAnswer.rfind('.') != 5:
print('Ошибочный формат даты, введите dd.mm.yyyy')
continue
try:
date = datetime.datetime.strptime(userAnswer, '%d.%m.%Y')
print('Дата: ', date, 'корректна')
break
except ValueError:
print('Введена не корректная дата! Введите dd.mm.yyyy')
continue
# Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня)
#
# Вавилонцы решили построить удивительную башню —
# расширяющуюся к верху и содержащую бесконечное число этажей и комнат.
# Она устроена следующим образом — на первом этаже одна комната,
# затем идет два этажа, на каждом из которых по две комнаты,
# затем идёт три этажа, на каждом из которых по три комнаты и так далее:
# ...
# 12 13 14
# 9 10 11
# 6 7 8
# 4 5
# 2 3
# 1
#
# Эту башню решили оборудовать лифтом --- и вот задача:
# нужно научиться по номеру комнаты определять,
# на каком этаже она находится и какая она по счету слева на этом этаже.
#
# Входные данные: В первой строчке задан номер комнаты N, 1 ≤ N ≤ 2 000 000 000.
#
# Выходные данные: Два целых числа — номер этажа и порядковый номер слева на этаже.
#
# Пример:
# Вход: 13
# Выход: 6 2
#
# Вход: 11
# Выход: 5 3
room = int(input('''\n3. Вы стоите у лифта странной башни, вам известен номер комнаты, в которую вам надо,
но вы не знаете на каком она этаже.
Эта программа поможет вам сориентироваться в башне. Введите номер комнаты: '''))
# количество комнат нам пригодится в нескольких вычислениях, по этому сохраню его в ещё одной переменной
n = room
roomsBefore = 0
bloc = 0
# определяем количество комнат до интересующего нас блока
while n > 0:
bloc += 1
n = n - bloc**2
roomsBefore = roomsBefore + bloc**2
roomsBefore = roomsBefore - bloc**2
# определим номер этажа в блоке
numberInBloc = room - roomsBefore
floorInBloc = 1
while numberInBloc > bloc:
floorInBloc += 1
numberInBloc = numberInBloc - bloc
# определим номер этажа в башне
floorInTower = 0
while bloc > 0:
floorInTower = floorInTower + (bloc - 1)
bloc -= 1
floor = floorInTower + floorInBloc
print('Этаж: ', floor)
print('Номер комнаты слева на право: ', numberInBloc)