Конвертируйте доллары США и евро в боте Telegram

#python #python-3.x #telegram #telegram-bot

#python #python-3.x #telegram #telegram-бот

Вопрос:

Я изучаю Python для создания простого бота для Telegram, но у меня проблема. Я создал 2 файла exchange.py и BotHtmlTelegram.py

exchange.py:

 EXCHANGE=1.125

def from_usd_to_eur(usd):
    return usd/EXCHANGE

def from_eur_to_usd(eur):
    return EXCHANGE*eur
  

и это BotHtmlTelegram.py:

 from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import exchange

TOKEN="My_Token"

def extract_number(text):
     return text.split()[1].strip()

def convert_usd(update, context):
     usd=float(extract_number(update.message.text))
     eur=exchange.from_usd_to_eur(usd)
     print(f'Eseguita conversione da {usd} USD a {eur} EUR')
     update.message.reply_text(f'{eur} EUR')

def convert_eur(update, context):
     eur=float(extract_number(update.message.text))
     usd=exchange.from_eur_to_usd(eur)
     print(f'Eseguita conversione da {eur} EUR a {usd} USD')
     update.message.reply_text(f'{usd} USD')

def main():
   upd= Updater("My_Token", use_context=True)
   disp=upd.dispatcher

   disp.add_handler(CommandHandler("usd", convert_usd))
   disp.add_handler(CommandHandler("eur", convert_eur))

   upd.start_polling()

   upd.idle()

if __name__=='__main__':
   main()
  

В моем телеграмме бота я задаю команды / eur и / usd — если я пишу / eur 100, результат в порядке, но когда я пишу / usr 100, ничего не происходит —

Что я делаю не так?

Большое спасибо, приятель

Комментарии:

1. лучше использовать api CurrencyConverter

Ответ №1:

  • Проверьте, не слишком ли длинный вывод, который вы получаете от from_usd_to_eur (usd), для отображения. Также попробуйте использовать «//» вместо «/». Первый выдает вам значение int вместо значения float.

  • Вы неправильно написали «usd» как «usr» при вызове команды, возможно, в этом причина.

Ответ №2:

Спасибо, ребята, ваш ответ станет моим следующим шагом к изучению. На данный момент небольшая программа работает. Я запускаю во второй раз, и теперь / usd (спасибо @nordmanden) работает корректно