Работа со словарём, как вытащить нужное слова из словаря?

Подскажите пожалуйста, совсем недавно начал изучать Питон и столкнулся с такой проблемой:

import telebot
from telebot import types
import config
import collections


bot = telebot.TeleBot(config.TOKEN)

city_set = ['Москва', 'С. Петербург', 'Сочи', 'Новосибирск', 'Казань', 'Н. Новгород', 'Краснодар', 'Хабаровск', 'Самара', 'Саратов', 'Крым', 'Тверь']

city = telebot.types.ReplyKeyboardMarkup(True, True)
city.row('Москва', 'С. Петербург')
city.row('Сочи', 'Новосибирск')
city.row('Казань', 'Н. Новгород')


@bot.message_handler(commands=['start'])
def start_message(message):
    sent = bot.send_message(message.chat.id, str(config.hello))
    bot.register_next_step_handler(sent, Hello)

def Hello(message):
    print(message.chat.id)
    bot.send_message(message.chat.id, str(config.hello_2).format(name=message.text), reply_markup=city)

    @bot.message_handler(content_types=['text'])
    def handle_text(message):
        x = message.text
        for i in city_set:
            if i in x:
                bot.send_message(message.chat.id, message.text + ' мой самый любимый город! Как же мне хотелось бы жить там.')
                break
            else:
                bot.send_message(message.chat.id, 'Что-то не припомню такой город, возможно у него есть другое название?')
                break

        #if message.text in city_2:

bot.polling()

Имеется словарь "city_set", когда пользователь пишет свой город, бот должен сверяться со словарём и если это слово есть в словаре то бот должен откликаться соответствующе. Пока бот реагирует только на город "Москва", остальные города он якобы не видит в словаре. Помогите пожалуйста, где ошибка в коде?


Ответы (1 шт):

Автор решения: CrazyElf

У вас проверяет только на первое слово из списка, а дальше выполнение цикла прерывается через break:

for i in city_set:
    if i in x:
        bot.send_message(message.chat.id, message.text + ' мой самый любимый город! Как же мне хотелось бы жить там.')
        break # конец цикла!
    else:
        bot.send_message(message.chat.id, 'Что-то не припомню такой город, возможно у него есть другое название?')
        break # конец цикла!

Можно сделать эту проверку так:

if any(i in x for i in city_set):
    bot.send_message(message.chat.id, message.text + ' мой самый любимый город! Как же мне хотелось бы жить там.')
else:
    bot.send_message(message.chat.id, 'Что-то не припомню такой город, возможно у него есть другое название?')

Конструкция any(i in x for i in city_set) выдаст True, если любой из членов коллекции city_set встречается в строке x и False если ни один из них там не встречается, что вы и хотите проверить.

→ Ссылка