-
Notifications
You must be signed in to change notification settings - Fork 0
/
anfisa.py
135 lines (117 loc) · 4.1 KB
/
anfisa.py
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
import datetime as dt
import requests
DATABASE = {
'Сергей': 'Омск',
'Соня': 'Москва',
'Алексей': 'Калининград',
'Миша': 'Москва',
'Дима': 'Челябинск',
'Алина': 'Красноярск',
'Егор': 'Пермь',
'Коля': 'Красноярск',
'Артём': 'Владивосток',
'Петя': 'Михайловка'
}
UTC_OFFSET = {
'Москва': 3,
'Санкт-Петербург': 3,
'Новосибирск': 7,
'Екатеринбург': 5,
'Нижний Новгород': 3,
'Казань': 3,
'Челябинск': 5,
'Омск': 6,
'Самара': 4,
'Ростов-на-Дону': 3,
'Уфа': 5,
'Красноярск': 7,
'Воронеж': 3,
'Пермь': 5,
'Волгоград': 4,
'Краснодар': 3,
'Калининград': 2,
'Владивосток': 10
}
def format_count_friends(count_friends):
if count_friends == 1:
return '1 друг'
elif 2 <= count_friends <= 4:
return f'{count_friends} друга'
else:
return f'{count_friends} друзей'
def what_time(city):
offset = UTC_OFFSET[city]
city_time = dt.datetime.utcnow() + dt.timedelta(hours=offset)
f_time = city_time.strftime("%H:%M")
return f_time
def what_weather(city):
url = f'http://wttr.in/{city}'
weather_parameters = {
'format': 2,
'M': ''
}
try:
response = requests.get(url, params=weather_parameters)
except requests.ConnectionError:
return '<сетевая ошибка>'
if response.status_code == 200:
return response.text.strip()
else:
return '<ошибка на сервере погоды>'
def process_anfisa(query):
if query == 'сколько у меня друзей?':
count_string = format_count_friends(len(DATABASE))
return f'У тебя {count_string}'
elif query == 'кто все мои друзья?':
friends_string = ', '.join(DATABASE.keys())
return f'Твои друзья: {friends_string}'
elif query == 'где все мои друзья?':
unique_cities = set(DATABASE.values())
cities_string = ', '.join(unique_cities)
return f'Твои друзья в городах: {cities_string}'
else:
return '<неизвестный запрос>'
def process_friend(name, query):
if name in DATABASE:
city = DATABASE[name]
if query == 'ты где?':
return f'{name} в городе {city}'
elif query == 'который час?':
if city not in UTC_OFFSET:
return f'<не могу определить время в городе {city}>'
time = what_time(city)
return f'Там сейчас {time}'
elif query == 'как погода?':
weather = what_weather(city)
return f'Там сейчас {weather}'
else:
return '<неизвестный запрос>'
else:
return f'У тебя нет друга по имени {name}'
def process_query(query):
tokens = query.split(', ')
name = tokens[0]
if name == 'Анфиса':
return process_anfisa(tokens[1])
else:
return process_friend(name, tokens[1])
def runner():
queries = [
'Анфиса, сколько у меня друзей?',
'Анфиса, кто все мои друзья?',
'Анфиса, где все мои друзья?',
'Анфиса, кто виноват?',
'Коля, ты где?',
'Соня, что делать?',
'Антон, ты где?',
'Алексей, который час?',
'Артём, который час?',
'Антон, который час?',
'Петя, который час?',
'Коля, как погода?',
'Соня, как погода?',
'Антон, как погода?'
]
for query in queries:
print(query, '-', process_query(query))
runner()