sudo apt-get install <package name>=<version>
python -m pip install --force-reinstall pip==19.3.1
def talk():
myEmi = input("") # 1 присваиваем переменной myEmi значение введенное в input (это должно быть имя файла?) а кажется что сюда хотели вводить слово которое нужно искать в файле
with open(f"BD1/{myEmi}.txt", "r") as file: # 2 открытие файла на чтение с именем из п.1
if file.read() == myEmi: # 3 file.read() читает содержимое file и возвращает содержимое ввиде строки, а дальше вы сравниваете с введенным словом, которое же почему и в имени файла?! Нужно использовать оператор IN вместо ==, а ещё правильнее прочитать файл так result = file.readlines() , что вернёт список строк и потом уже искать в списке элемент.
print("Это слово есть!")
talk()
else:
with open(f"BD1/{myEmi}.txt", "w") as file:
file.write(myEmi)
talk()
talk() # 0 вызов функции talk()
Как известно, имена, которым выполняется присваивание внутри функции, по умолчанию рассматриваются как локальные – они располагаются в области видимости функции и существуют только во время работы функции. Но я еще не говорил, что локальные переменные определяются статически, во время компиляции программного кода в инструкции def, а не в соответствии с операциями присваивания, производимыми во время выполнения. Эта особенность становится причиной появления самых причудливых сообщений в группе новостей, получаемых от начинающих программистов.
Обычно, если внутри функции имени не присваивается какое-либо значение, поиск его будет производиться в области видимости объемлющего модуля. Но посмотрите, что произойдет, если добавить инструкцию присваивания переменной X после ее использования.X = 99 >>> def selector(): ... print(X) # Переменная еще не существует! ... X = 88 # X классифицируется как локальная переменная ... # То же самое происходит при “import X”, “def X”... >>> selector() Traceback (most recent call last): ...текст сообщения об ошибке опущен... UnboundLocalError: local variable ‘X’ referenced before assignment
Было получено сообщение о том, что переменная не определена, но причина его появления не очевидна. Этот программный код компилируется интерпретатором во время ввода в интерактивной оболочке или во время импорта модуля. Вовремя компиляции Python обнаруживает операцию присваивания переменной X и делает вывод, что X – это локальное имя везде в теле функции. Но во время выполнения функции, из-за того, что к моменту вызова инструкции print операция присваивания еще не производилась, интерпретатор сообщает о том, что имя не определено. Согласно этому правилу использования имен, он говорит, что обращение к локальной переменной X произведено до того, как ей было присвоено значение. Фактически любая операция присваивания внутри функции создает локальное имя. Операция импортирования, =, вложенные инструкции def, вложенные определения классов и так далее – все трактуются именно таким образом. Проблема возникает из-за того, что операция присваивания делает имена локальными для всей функции, а не только для той ее части, которая следует заинструкцией присваивания.
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.message:
for row in call.message.json['reply_markup']['inline_keyboard']:
if call.data==row[0]['callback_data']:
print(f'Текст на нажатой кнопке: {row[0]["text"]}')
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.message:
for row in call.message.json['reply_markup']['inline_keyboard']:
print(row[0]['text'])
register_next_step_handler(message, my_func, password)
def register_next_step_handler(
self, message: types.Message, callback: Callable, *args, **kwargs) -> None:
"""
Registers a callback function to be notified when new message arrives after `message`.
Warning: In case `callback` as lambda function, saving next step handlers will not work.
:param message: The message for which we want to handle new message in the same chat.
:param callback: The callback function which next new message arrives.
:param args: Args to pass in callback func
:param kwargs: Args to pass in callback func
"""