-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHW19_exceptions.py
More file actions
195 lines (150 loc) · 6.24 KB
/
HW19_exceptions.py
File metadata and controls
195 lines (150 loc) · 6.24 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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
import time
import sys
#Task 1
# def calculator(string):
# expression = [i for i in string.split()]
# a = expression[0]
# b = expression[2]
# sign = expression[1]
# try:
# a_int = a.isdigit() or (a.startswith('-') and a[1:].isdigit())
# b_int = b.isdigit() or (b.startswith('-') and b[1:].isdigit())
# if sign == '/' and a_int and b_int:
# result = eval(f"{a}//{b}")
# else:
# result = eval(f"{a}{sign}{b}")
# return int(result) if isinstance(result, float) and result.is_integer() else result
# except ZeroDivisionError:
# return "ERROR"
# except:
# return "Invalid input"
# print(calculator(input("Введите выражение: ")))
#Task 2
# def pass_selection():
# print("Программа ожидает на вход пароли. Если вы желаете получить результат, напишите в консоль stop.\n")
# data = []
# possible_pass = []
# while True:
# p = input().strip()
# if p.lower() == 'stop':
# break
# data.append(p)
# for i in data:
# try:
# if all(c in "0123456789abcdef" for c in i):
# int(i, 16)
# possible_pass.append(i)
# except ValueError:
# continue
# print(possible_pass)
# pass_selection()
#Task 3
'''
Напишите функцию, которая проверяет, есть ли ученик в списке победителей для
каждой из олимпиад, и выведите результат в следующем формате:
# последнее значение в каждой строке выводится при наличии в списке
[название_первой_олимпиады] статус балл_за_олимпиаду
--------------------
[название_второй_олимпиады] статус балл_за_пятую_задачу
--------------------
Если ученик есть в списке победителей, то он получает статус «победитель»,
иначе – статус «призёр», поскольку в этих олимпиадах «вы все уже победители»
'''
# olympiad1 = {"name": "Пробная вышка",
# "winners": {
# "Олеся Олимпиадникова": 594,
# "Олег Олимпиадников": 587,
# "Онисим Олимпиадников": 581,
# }
# }
# olympiad2 = {"name": "Горные воробьи",
# "winners": {
# "Ольга Олимпиадникова": (20, 20, 19, 20),
# "Олеся Олимпиадникова": (19, 19, 20, 20, 17),
# "Офелия Олимпиадникова": (20, 20, 20, 20, 13)
# }
# }
# def check_olympiad(olympiad, student_name):
# winners = olympiad["winners"]
# name = olympiad["name"]
# try:
# winners = olympiad["winners"]
# score = winners[f"{student_name}"]
# status = "победитель"
# if name == "Горные воробьи":
# try:
# score = winners[student_name][4]
# except IndexError:
# score = 0
# except KeyError:
# status = "призёр"
# score = 0
# finally:
# print("---------")
# print(f"{name} {status} {score}")
# check_olympiad(olympiad1, "Олеся Олимпиадникова")
# check_olympiad(olympiad2, "Олеся Олимпиадникова")
# check_olympiad(olympiad1, "Ольга Олимпиадникова")
# check_olympiad(olympiad2, "Ольга Олимпиадникова")
# Task 4
# def annoying_program():
# try:
# while True:
# print("Вы не выйдете! Ха-ха-ха! 😈")
# time.sleep(0.1)
# annoying_program() # Рекурсия для усложнения выхода
# except KeyboardInterrupt:
# print("Нет, нет, нет! Я не позволю тебе выйти!")
# annoying_program() # Игнорируем прерывание и запускаем снова
# if __name__ == "__main__":
# print("Добро пожаловать в ад! Нажмите Ctrl+C, но это не поможет...")
# annoying_program()
#Task 5
class TooManyBeersError(Exception):
pass
class LizardInGlassError(Exception):
pass
class NegativeBeerError(Exception):
pass
def process_order(order):
try:
if order == "ящерица в стакане":
raise LizardInGlassError("Такого заказа нет!")
elif order == "-1 кружку лимонада":
raise NegativeBeerError("Количество не может быть отрицательным!")
elif order == "999999999 кружек лимонада":
raise TooManyBeersError("Столько лимонада нет в баре!")
elif order == "qwerty кружек лимонада":
raise ValueError("Некорректный ввод!")
elif order == "0 кружек лимонада":
print("Заказ пуст. Ничего не подано.")
else:
print(f"Заказ принят: {order}")
except LizardInGlassError as e:
print(f"Ошибка: {e}")
except NegativeBeerError as e:
print(f"Ошибка: {e}")
except TooManyBeersError as e:
print(f"Ошибка: {e}")
except ValueError as e:
print(f"Ошибка: {e}")
finally:
print("Обработка заказа завершена.")
orders = [
"кружку лимонада",
"2 кружки лимонада",
"0 кружек лимонада",
"999999999 кружек лимонада",
"ящерица в стакане",
"–1 кружку лимонада",
"qwerty кружек лимонада"
]
for order in orders:
process_order(order)
print("\nРеальный клиент: Где туалет?")
try:
raise Exception("Бар вспыхивает пламенем!")
except Exception as e:
print(f"Произошло страшное: {e}")
finally:
print("Бар сгорел дотла. Конец.")