Работа со словарём, как вытащить нужное слова из словаря?
Подскажите пожалуйста, совсем недавно начал изучать Питон и столкнулся с такой проблемой:
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 шт):
У вас проверяет только на первое слово из списка, а дальше выполнение цикла прерывается через 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 если ни один из них там не встречается, что вы и хотите проверить.