diff --git a/.gitignore b/.gitignore index af6d502..b8f555b 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,12 @@ dmypy.json # Pyre type checker .pyre/ +/hw2venv/ +/.idea/ +/hw2.csv +/referat.txt +/referat2.txt +/learn-homework-2.iml +/config.py +/users/ +/cities_original.csv diff --git a/1_date_and_time.py b/1_date_and_time.py index e72d76a..a4eac30 100644 --- a/1_date_and_time.py +++ b/1_date_and_time.py @@ -7,13 +7,18 @@ 2. Превратите строку "01/01/20 12:10:03.234567" в объект datetime """ +from datetime import datetime as dt, date +import datetime + def print_days(): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + print(date.today(), + date.today() - datetime.timedelta(days=1), + date.today() - datetime.timedelta(days=30)) def str_2_datetime(date_string): @@ -21,7 +26,8 @@ def str_2_datetime(date_string): Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + return dt.strptime(date_string, "%d/%m/%y %H:%M:%S.%f") + if __name__ == "__main__": print_days() diff --git a/2_files.py b/2_files.py index 5072b13..09aee17 100644 --- a/2_files.py +++ b/2_files.py @@ -11,12 +11,33 @@ 5. Сохраните результат в файл referat2.txt """ + def main(): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + read_string = '' + try: + with open('referat.txt', 'r', encoding='UTF-8') as read_file: + while True: + line = read_file.readline() + if not line: + break + else: + read_string += line + + except (IOError, FileNotFoundError) as e: + print(e) + print(read_string) + print(len(read_string.split())) + print(read_string.replace('.', '!')) + try: + with open('referat2.txt', 'w', encoding='UTF-8') as write_file: + write_file.write(read_string.replace('.', '!')) + except (IOError, FileNotFoundError) as e: + print(e) + if __name__ == "__main__": main() diff --git a/3_dict_to_csv.py b/3_dict_to_csv.py index 44d6efb..e04f7e6 100644 --- a/3_dict_to_csv.py +++ b/3_dict_to_csv.py @@ -9,13 +9,35 @@ 2. Запишите содержимое списка словарей в файл в формате csv """ +import pprint +from string import ascii_lowercase as a_low +from random import randint, sample +import csv def main(): """ Эта функция вызывается автоматически при запуске скрипта в консоли В ней надо заменить pass на ваш код """ - pass + fields = ['name', 'age', 'job'] + values = [''.join(sample(a_low, 5)).capitalize(), + randint(18,65), + ''.join(sample(a_low, 10)).capitalize()+' LLC'] + dict_list = [{fields[0]: ''.join(sample(a_low, 5)).capitalize(), + fields[1]: randint(18,65), + fields[2]: ''.join(sample(a_low, 10)).capitalize()+' LLC'} + for x in range(1000)] + my_dialect = csv.excel() + my_dialect.delimiter = ';' + try: + with open('hw2.csv', 'w', newline='') as write_file: + writer = csv.DictWriter(write_file, fields, dialect=my_dialect) + writer.writeheader() + for each in dict_list: + writer.writerow(each) + except (IOError, FileNotFoundError) as e: + print(e) + pprint.pprint(dict_list) if __name__ == "__main__": main() diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..e1b745b --- /dev/null +++ b/bot.py @@ -0,0 +1,184 @@ +import datetime +import os +import random +import re +import telebot +import config +import ephem + + +def main(): + bot = telebot.TeleBot(config.BOT_TOKEN) + + def read_cities(user_id): + + def read_file(file_name) -> list: + cities_list = [] + try: + with open(file_name, 'r', newline='\r\n', encoding='utf-8') as f: + while True: + line = f.readline().strip() + if not line: + break + cities_list.append(line) + return cities_list + except (FileNotFoundError, IOError) as e: + print(e) + bot.send_message(user_id, 'Something goes wrong, try later ' + 'or contact support, please') + + user_list = [] + files = ['cities.csv'] + if str(user_id) in os.listdir('./users'): + files.append(f'./users/{user_id}') + user_list = read_file(files[1]) + common_cities_list = read_file(files[0]) + return common_cities_list, user_list + + @bot.message_handler(commands=['cities', 'города']) + def game_of_cities(msg): # Orchestrator of Cities game + if bot.get_state(msg.chat.id): # Check, whether we are playing already + if available_letter( + bot.get_state(msg.chat.id)) == msg.text.lower()[0]: + response = play_cities(msg.chat.id, msg.text) + else: # If user's first letter of a city is wrong + response = bot.get_state(msg.chat.id) # keep state with current city + else: # The beginning of a game + response = play_cities(msg.chat.id, city='') + if response == '1': + stop_game_of_cities(msg) + user_message = 'Congratulations! You won the game!' + elif response == bot.get_state(msg.chat.id): + named_cities(msg) + user_message = 'Wrong city. The last was: ' + response + else: + bot.set_state(msg.chat.id, response) # Setting user state, based on a name of a city + next_letter = available_letter(response) # Choosing available letter for the next turn + user_message = response + f' your move is on {next_letter}' + bot.send_message(msg.chat.id, user_message) + + def available_letter(word: str) -> str: + for i in word[::-1].lower(): + if i not in ('ь', 'ы', 'ъ', 'ё'): + return i + + def compare_cities(all_cities, user_named, city, user_id) -> str: # Compare user's city with + # available and replying with a city, if possible + if city == '': # The only way of a blank city - is the beginning of a game + bot_city = random.choice(all_cities) + save_already_named(user_id, bot_city) + return bot_city + else: + if city.capitalize() in all_cities and city not in user_named: + result_set = set(all_cities) + result_set.symmetric_difference_update(set(user_named)) + result_set.symmetric_difference_update(([city])) + for each in result_set: + if each[0].lower() == available_letter(city): + bot_city = each + save_already_named(user_id, bot_city) + save_already_named(user_id, city) # add to user's named + return bot_city # If we found corresponding city + return '1' # If not - user wins + return bot.get_state(user_id) + + def save_already_named(user_id, bot_city): # saving city that is already used for this user + try: + with open(f'./users/{user_id}', 'a', newline='', encoding='utf-8') as f: + f.writelines(f'{bot_city}\r\n') + except (FileNotFoundError, IOError) as e: + print(e) + bot.send_message(user_id, 'Critical error. ' + 'Please, start the game again') + + def play_cities(user_id, city) -> str: # Choosing available cities + all_cities, user_named = read_cities(user_id) + bot_city = compare_cities(all_cities, user_named, city, user_id) + return bot_city + + @bot.message_handler(commands=['cities_stop', 'города_стоп']) + def stop_game_of_cities(msg): + try: + bot.delete_state(msg.chat.id) + os.remove(f'./users/{msg.chat.id}') + bot.send_message(msg.chat.id, 'If you stop the game - I won)') + except (FileNotFoundError, FileExistsError, OSError) as e: + print(e) + bot.send_message(msg.chat.id, 'Something goes wrong, try later' + ' or contact support, please') + + @bot.message_handler(commands=['wordcount', 'wc']) + def word_count(msg): + args = telebot.util.extract_arguments(msg.text) + if args: + res = args.strip().split() + for each in res: + if not each.isalpha(): + bot.send_message(msg.chat.id, + f'Input some WORDS, not numbers') + break + else: + bot.send_message(msg.chat.id, f'{len(res)} words') + else: + bot.send_message(msg.chat.id, 'Input some words after command') + + @bot.message_handler(commands=['full_moon', 'next_full_moon', 'moon']) + def next_full_moon(msg): + args = telebot.util.extract_arguments(msg.text) + next_moon = f'Next full moon based on today will be on '+\ + str( + ephem.next_full_moon( + datetime.datetime.today() + ) + ) + if args: + res = args.strip().split()[0] + if re.match(r'(0?[1-9]|[12][0-9]|3[01])[\-]' + r'(0?[1-9]|1[012])[\-]([12][0-9]+)', res): + try: + res = datetime.datetime.strptime(res, '%d-%m-%Y') + next_moon = f'Next full moon based on {res} will be on ' +\ + str( + ephem.next_full_moon( + res + ) + ) + except (ValueError, KeyError) as e: + print(e) + next_moon += "\nPlease input ONLY " \ + "date using format dd-mm-yyyy" + else: + next_moon += "\nPlease input date using format dd-mm-yyyy" + bot.send_message(msg.chat.id, next_moon) + + @bot.message_handler(commands=['/named_cities']) + def named_cities(msg): + _, my_list = read_cities(msg.chat.id) + bot.send_message(msg.chat.id, ', '.join(my_list)) + + @bot.message_handler(content_types=['text']) + def main_reply(msg): + if os.path.isfile(f'./users/{msg.chat.id}'): + game_of_cities(msg) + else: + bot.send_message(msg.chat.id, + f'Available commands are: ' + f'\n/wordcount /wc counting words put ' + f'after the command' + f'\n/next_full_moon /next_moon /moon' + f' - put a date dd-mm-yyyy after the comand to' + f' see the next full moon date' + f'\n/cities /города - the cities game' + f'\n/named_cities - the list of cities which have' + f' been already named' + f'\n/cities_stop /города_стоп - stop playing') + try: + bot.infinity_polling(allowed_updates=['chat_member', + 'my_chat_member', + 'message']) + except KeyboardInterrupt: + bot.stop_polling() + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/cities.csv b/cities.csv new file mode 100644 index 0000000..af3e739 --- /dev/null +++ b/cities.csv @@ -0,0 +1,1118 @@ +Абаза +Абакан +Абдулино +Абинск +Агидель +Агрыз +Адыгейск +Азнакаево +Азов +Ак-Довурак +Аксай +Алагир +Алапаевск +Алатырь +Алдан +Алейск +Александров +Александровск +Александровск-Сахалинский +Алексеевка +Алексин +Алзамай +Алупка +Алушта +Альметьевск +Амурск +Анадырь +Анапа +Ангарск +Андреаполь +Анжеро-Судженск +Анива +Апатиты +Апрелевка +Апшеронск +Арамиль +Аргун +Ардатов +Ардон +Арзамас +Аркадак +Армавир +Армянск +Арсеньев +Арск +Артём +Артёмовск +Артёмовский +Архангельск +Асбест +Асино +Астрахань +Аткарск +Ахтубинск +Ачинск +Ачхой-Мартан +Аша +Бабаево +Бабушкин +Бавлы +Багратионовск +Байкальск +Баймак +Бакал +Баксан +Балабаново +Балаково +Балахна +Балашиха +Балашов +Балей +Балтийск +Барабинск +Барнаул +Барыш +Батайск +Бахчисарай +Бежецк +Белая Калитва +Белая Холуница +Белгород +Белебей +Белёв +Белинский +Белово +Белогорск +Белогорск +Белозерск +Белокуриха +Беломорск +Белоозёрский +Белорецк +Белореченск +Белоусово +Белоярский +Белый +Бердск +Березники +Берёзовский +Берёзовский +Беслан +Бийск +Бикин +Билибино +Биробиджан +Бирск +Бирюсинск +Бирюч +Благовещенск +Благовещенск +Благодарный +Бобров +Богданович +Богородицк +Богородск +Боготол +Богучар +Бодайбо +Бокситогорск +Болгар +Бологое +Болотное +Болохово +Болхов +Большой Камень +Бор +Борзя +Борисоглебск +Боровичи +Боровск +Бородино +Братск +Бронницы +Брянск +Бугульма +Бугуруслан +Будённовск +Бузулук +Буинск +Буй +Буйнакск +Бутурлиновка +Валдай +Валуйки +Велиж +Великие Луки +Великий Новгород +Великий Устюг +Вельск +Венёв +Верещагино +Верея +Верхнеуральск +Верхний Тагил +Верхний Уфалей +Верхняя Пышма +Верхняя Салда +Верхняя Тура +Верхотурье +Верхоянск +Весьегонск +Ветлуга +Видное +Вилюйск +Вилючинск +Вихоревка +Вичуга +Владивосток +Владикавказ +Владимир +Волгоград +Волгодонск +Волгореченск +Волжск +Волжский +Вологда +Володарск +Волоколамск +Волосово +Волхов +Волчанск +Вольск +Воркута +Воронеж +Ворсма +Воскресенск +Воткинск +Всеволожск +Вуктыл +Выборг +Выкса +Высоковск +Высоцк +Вытегра +Вышний Волочёк +Вяземский +Вязники +Вязьма +Вятские Поляны +Гаврилов Посад +Гаврилов-Ям +Гагарин +Гаджиево +Гай +Галич +Гатчина +Гвардейск +Гдов +Геленджик +Георгиевск +Глазов +Голицыно +Горбатов +Горно-Алтайск +Горнозаводск +Горняк +Городец +Городище +Городовиковск +Гороховец +Горячий Ключ +Грайворон +Гремячинск +Грозный +Грязи +Грязовец +Губаха +Губкин +Губкинский +Гудермес +Гуково +Гулькевичи +Гурьевск +Гурьевск +Гусев +Гусиноозёрск +Гусь-Хрустальный +Давлеканово +Дагестанские Огни +Далматово +Дальнегорск +Дальнереченск +Данилов +Данков +Дегтярск +Дедовск +Демидов +Дербент +Десногорск +Джанкой +Дзержинск +Дзержинский +Дивногорск +Дигора +Димитровград +Дмитриев +Дмитров +Дмитровск +Дно +Добрянка +Долгопрудный +Долинск +Домодедово +Донецк +Донской +Дорогобуж +Дрезна +Дубна +Дубовка +Дудинка +Духовщина +Дюртюли +Дятьково +Евпатория +Егорьевск +Ейск +Екатеринбург +Елабуга +Елец +Елизово +Ельня +Еманжелинск +Емва +Енисейск +Ермолино +Ершов +Ессентуки +Ефремов +Железноводск +Железногорск +Железногорск +Железногорск-Илимский +Жердевка +Жигулёвск +Жиздра +Жирновск +Жуков +Жуковка +Жуковский +Завитинск +Заводоуковск +Заволжск +Заволжье +Задонск +Заинск +Закаменск +Заозёрный +Заозёрск +Западная Двина +Заполярный +Зарайск +Заречный +Заречный +Заринск +Звенигово +Звенигород +Зверево +Зеленогорск +Зеленоградск +Зеленодольск +Зеленокумск +Зерноград +Зея +Зима +Златоуст +Злынка +Змеиногорск +Знаменск +Зубцов +Зуевка +Ивангород +Иваново +Ивантеевка +Ивдель +Игарка +Ижевск +Избербаш +Изобильный +Иланский +Инза +Иннополис +Инсар +Инта +Ипатово +Ирбит +Иркутск +Исилькуль +Искитим +Истра +Ишим +Ишимбай +Йошкар-Ола +Кадников +Казань +Калач +Калач-на-Дону +Калачинск +Калининград +Калининск +Калтан +Калуга +Калязин +Камбарка +Каменка +Каменногорск +Каменск-Уральский +Каменск-Шахтинский +Камень-на-Оби +Камешково +Камызяк +Камышин +Камышлов +Канаш +Кандалакша +Канск +Карабаново +Карабаш +Карабулак +Карасук +Карачаевск +Карачев +Каргат +Каргополь +Карпинск +Карталы +Касимов +Касли +Каспийск +Катав-Ивановск +Катайск +Качканар +Кашин +Кашира +Кедровый +Кемерово +Кемь +Керчь +Кизел +Кизилюрт +Кизляр +Кимовск +Кимры +Кингисепп +Кинель +Кинешма +Киреевск +Киренск +Киржач +Кириллов +Кириши +Киров +Киров +Кировград +Кирово-Чепецк +Кировск +Кировск +Кирс +Кирсанов +Киселёвск +Кисловодск +Клин +Клинцы +Княгинино +Ковдор +Ковров +Ковылкино +Когалым +Кодинск +Козельск +Козловка +Козьмодемьянск +Кола +Кологрив +Коломна +Колпашево +Кольчугино +Коммунар +Комсомольск +Комсомольск-на-Амуре +Конаково +Кондопога +Кондрово +Константиновск +Копейск +Кораблино +Кореновск +Коркино +Королёв +Короча +Корсаков +Коряжма +Костерёво +Костомукша +Кострома +Котельники +Котельниково +Котельнич +Котлас +Котово +Котовск +Кохма +Красавино +Красноармейск +Красноармейск +Красновишерск +Красногорск +Краснодар +Краснозаводск +Краснознаменск +Краснознаменск +Краснокаменск +Краснокамск +Красноперекопск +Краснослободск +Краснослободск +Краснотурьинск +Красноуральск +Красноуфимск +Красноярск +Красный Кут +Красный Сулин +Красный Холм +Кремёнки +Кропоткин +Крымск +Кстово +Кубинка +Кувандык +Кувшиново +Кудрово +Кудымкар +Кузнецк +Куйбышев +Кукмор +Кулебаки +Кумертау +Кунгур +Купино +Курган +Курганинск +Курильск +Курлово +Куровское +Курск +Куртамыш +Курчалой +Курчатов +Куса +Кушва +Кызыл +Кыштым +Кяхта +Лабинск +Лабытнанги +Лагань +Ладушкин +Лаишево +Лакинск +Лангепас +Лахденпохья +Лебедянь +Лениногорск +Ленинск +Ленинск-Кузнецкий +Ленск +Лермонтов +Лесной +Лесозаводск +Лесосибирск +Ливны +Ликино-Дулёво +Липецк +Липки +Лиски +Лихославль +Лобня +Лодейное Поле +Лосино-Петровский +Луга +Луза +Лукоянов +Луховицы +Лысково +Лысьва +Лыткарино +Льгов +Любань +Люберцы +Любим +Людиново +Лянтор +Магадан +Магас +Магнитогорск +Майкоп +Майский +Макаров +Макарьев +Макушино +Малая Вишера +Малгобек +Малмыж +Малоархангельск +Малоярославец +Мамадыш +Мамоново +Мантурово +Мариинск +Мариинский Посад +Маркс +Махачкала +Мглин +Мегион +Медвежьегорск +Медногорск +Медынь +Межгорье +Междуреченск +Мезень +Меленки +Мелеуз +Менделеевск +Мензелинск +Мещовск +Миасс +Микунь +Миллерово +Минеральные Воды +Минусинск +Миньяр +Мирный +Мирный +Михайлов +Михайловка +Михайловск +Михайловск +Мичуринск +Могоча +Можайск +Можга +Моздок +Мончегорск +Морозовск +Моршанск +Мосальск +Москва +Муравленко +Мураши +Мурино +Мурманск +Муром +Мценск +Мыски +Мытищи +Мышкин +Набережные Челны +Навашино +Наволоки +Надым +Назарово +Назрань +Называевск +Нальчик +Нариманов +Наро-Фоминск +Нарткала +Нарьян-Мар +Находка +Невель +Невельск +Невинномысск +Невьянск +Нелидово +Неман +Нерехта +Нерчинск +Нерюнгри +Нестеров +Нефтегорск +Нефтекамск +Нефтекумск +Нефтеюганск +Нея +Нижневартовск +Нижнекамск +Нижнеудинск +Нижние Серги +Нижний Ломов +Нижний Новгород +Нижний Тагил +Нижняя Салда +Нижняя Тура +Николаевск +Николаевск-на-Амуре +Никольск +Никольск +Никольское +Новая Ладога +Новая Ляля +Новоалександровск +Новоалтайск +Новоаннинский +Нововоронеж +Новодвинск +Новозыбков +Новокубанск +Новокузнецк +Новокуйбышевск +Новомичуринск +Новомосковск +Новопавловск +Новоржев +Новороссийск +Новосибирск +Новосиль +Новосокольники +Новотроицк +Новоузенск +Новоульяновск +Новоуральск +Новохопёрск +Новочебоксарск +Новочеркасск +Новошахтинск +Новый Оскол +Новый Уренгой +Ногинск +Нолинск +Норильск +Ноябрьск +Нурлат +Нытва +Нюрба +Нягань +Нязепетровск +Няндома +Облучье +Обнинск +Обоянь +Обь +Одинцово +Озёрск +Озёрск +Озёры +Октябрьск +Октябрьский +Окуловка +Олёкминск +Оленегорск +Олонец +Омск +Омутнинск +Онега +Опочка +Орёл +Оренбург +Орехово-Зуево +Орлов +Орск +Оса +Осинники +Осташков +Остров +Островной +Острогожск +Отрадное +Отрадный +Оха +Оханск +Очёр +Павлово +Павловск +Павловский Посад +Палласовка +Партизанск +Певек +Пенза +Первомайск +Первоуральск +Перевоз +Пересвет +Переславль-Залесский +Пермь +Пестово +Петров Вал +Петровск +Петровск-Забайкальский +Петрозаводск +Петропавловск-Камчатский +Петухово +Петушки +Печора +Печоры +Пикалёво +Пионерский +Питкяранта +Плавск +Пласт +Плёс +Поворино +Подольск +Подпорожье +Покачи +Покров +Покровск +Полевской +Полесск +Полысаево +Полярные Зори +Полярный +Поронайск +Порхов +Похвистнево +Почеп +Починок +Пошехонье +Правдинск +Приволжск +Приморск +Приморск +Приморско-Ахтарск +Приозерск +Прокопьевск +Пролетарск +Протвино +Прохладный +Псков +Пугачёв +Пудож +Пустошка +Пучеж +Пушкино +Пущино +Пыталово +Пыть-Ях +Пятигорск +Радужный +Радужный +Райчихинск +Раменское +Рассказово +Ревда +Реж +Реутов +Ржев +Родники +Рославль +Россошь +Ростов-на-Дону +Ростов +Рошаль +Ртищево +Рубцовск +Рудня +Руза +Рузаевка +Рыбинск +Рыбное +Рыльск +Ряжск +Рязань +Саки +Салават +Салаир +Салехард +Сальск +Самара +Санкт-Петербург +Саранск +Сарапул +Саратов +Саров +Сасово +Сатка +Сафоново +Саяногорск +Саянск +Светлогорск +Светлоград +Светлый +Светогорск +Свирск +Свободный +Себеж +Севастополь +Северо-Курильск +Северобайкальск +Северодвинск +Североморск +Североуральск +Северск +Севск +Сегежа +Сельцо +Семёнов +Семикаракорск +Семилуки +Сенгилей +Серафимович +Сергач +Сергиев Посад +Сердобск +Серов +Серпухов +Сертолово +Сибай +Сим +Симферополь +Сковородино +Скопин +Славгород +Славск +Славянск-на-Кубани +Сланцы +Слободской +Слюдянка +Смоленск +Снежинск +Снежногорск +Собинка +Советск +Советск +Советск +Советская Гавань +Советский +Сокол +Солигалич +Соликамск +Солнечногорск +Соль-Илецк +Сольвычегодск +Сольцы +Сорочинск +Сорск +Сортавала +Сосенский +Сосновка +Сосновоборск +Сосновый Бор +Сосногорск +Сочи +Спас-Деменск +Спас-Клепики +Спасск +Спасск-Дальний +Спасск-Рязанский +Среднеколымск +Среднеуральск +Сретенск +Ставрополь +Старая Купавна +Старая Русса +Старица +Стародуб +Старый Крым +Старый Оскол +Стерлитамак +Стрежевой +Строитель +Струнино +Ступино +Суворов +Судак +Суджа +Судогда +Суздаль +Сунжа +Суоярви +Сураж +Сургут +Суровикино +Сурск +Сусуман +Сухиничи +Сухой Лог +Сызрань +Сыктывкар +Сысерть +Сычёвка +Сясьстрой +Тавда +Таганрог +Тайга +Тайшет +Талдом +Талица +Тамбов +Тара +Тарко-Сале +Таруса +Татарск +Таштагол +Тверь +Теберда +Тейково +Темников +Темрюк +Терек +Тетюши +Тимашёвск +Тихвин +Тихорецк +Тобольск +Тогучин +Тольятти +Томари +Томмот +Томск +Топки +Торжок +Торопец +Тосно +Тотьма +Трёхгорный +Троицк +Трубчевск +Туапсе +Туймазы +Тула +Тулун +Туран +Туринск +Тутаев +Тында +Тырныауз +Тюкалинск +Тюмень +Уварово +Углегорск +Углич +Удачный +Удомля +Ужур +Узловая +Улан-Удэ +Ульяновск +Унеча +Урай +Урень +Уржум +Урус-Мартан +Урюпинск +Усинск +Усмань +Усолье-Сибирское +Усолье +Уссурийск +Усть-Джегута +Усть-Илимск +Усть-Катав +Усть-Кут +Усть-Лабинск +Устюжна +Уфа +Ухта +Учалы +Уяр +Фатеж +Феодосия +Фокино +Фокино +Фролово +Фрязино +Фурманов +Хабаровск +Хадыженск +Ханты-Мансийск +Харабали +Харовск +Хасавюрт +Хвалынск +Хилок +Химки +Холм +Холмск +Хотьково +Цивильск +Цимлянск +Циолковский +Чадан +Чайковский +Чапаевск +Чаплыгин +Чебаркуль +Чебоксары +Чегем +Чекалин +Челябинск +Чердынь +Черемхово +Черепаново +Череповец +Черкесск +Чёрмоз +Черноголовка +Черногорск +Чернушка +Черняховск +Чехов +Чистополь +Чита +Чкаловск +Чудово +Чулым +Чусовой +Чухлома +Шагонар +Шадринск +Шали +Шарыпово +Шарья +Шатура +Шахты +Шахунья +Шацк +Шебекино +Шелехов +Шенкурск +Шилка +Шимановск +Шиханы +Шлиссельбург +Шумерля +Шумиха +Шуя +Щёкино +Щёлкино +Щёлково +Щигры +Щучье +Электрогорск +Электросталь +Электроугли +Элиста +Энгельс +Эртиль +Югорск +Южа +Южно-Сахалинск +Южно-Сухокумск +Южноуральск +Юрга +Юрьев-Польский +Юрьевец +Юрюзань +Юхнов +Ядрин +Якутск +Ялта +Ялуторовск +Янаул +Яранск +Яровое +Ярославль +Ярцево +Ясногорск +Ясный +Яхрома