Помогите исправить ошибку при вычитании

код:

#!/usr/bin/python3
import telebot

bot = telebot.TeleBot(token='///')
mon = int(10000)

@bot.message_handler(commands=['start'])
def startJoin(message):
    if not str(message.chat.id) in 'c://tgplay':
        File = open('c://tgplay/{0}_money.py'.format(message.chat.id), "x+")
        File.write('50000')
        File.close

    send_welcome = f'? Привет, <b>{message.from_user.first_name}</b>!\n\nP.S. Бот в стадии разработки.' + "\nДля помощи, используйте команду /help."
    bot.send_message(message.chat.id, send_welcome, parse_mode='html')

@bot.message_handler(content_types=['text'])
def get_text_messages(message):
    if message.text == 'Работать':
        for en in range(1):
            ne = 10
            qos = ne-1
            bot.send_message(message.chat.id, '? Вы заработали ' + str(mon) + '$!\n⚡ Энергия: ' + str(qos), parse_mode='html')
            File = open('c://tgplay/{0}_money.py'.format(message.chat.id), 'r')
            str_numb = File.read()
            File.close
            numb = int(str_numb) + int(mon)
            File = open('c://tgplay/{0}_money.py'.format(message.chat.id), 'w')
            File.write(str(numb))
            File.close

    elif message.text == 'Баланс':
        File = open('c://tgplay/{0}_money.py'.format(message.chat.id), 'r')
        balance = File.read()
        bot.send_message(message.chat.id, 'Ваш баланс: ' + balance + '$')
        File.close

bot.polling(none_stop=True, interval=0)

Если увидели что то странное, значит это моя фантазия(код всё равно работает)

Ошибка(или как назвать, я не знаю) заключается с def'a (get_text_messages), а именно, с функцией range. Нужно чтобы при каждом запросе команды "Работать", писалась энергия с 10 до 1, но у меня пишется только:

Энергия: 9

И никак не уменьшается на единицу. Помогите сделать так, чтобы при каждом запросе выводилось на одну единицу меньше. Заранее, огромное спасибо!


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

Автор решения: Andrew Petelin

При каждом вызове get_text_messages с message.text равным 'Работать' вы заходите в цикл с одним проходом (range(1)) в котором будет инициализироваться ne=10 и qos всегда будет равен 9 (qos=ne-1).

  1. Уберите цикл for en in range(1) (по аналогии с elif message.text == 'Баланс')
  2. Храните энергию пользователя, например, также в файле, как вы делаете это балансом
  3. При каждом вызове get_text_messages с message.text равным 'Работать' считывайте текущую энергию пользователя, вычитайте затраченную и обновляйте в файле

P.S. Ну и конечно, я бы заменил хранение информации о балансе/энергии пользователей хотя бы на sqlite

→ Ссылка