python: Ошибка при вычислении и сложении
Написал команду "Машина улучшить 1" (улучшение машины), но обрабатывается команда неправильно, мой код:
elif message.text == 'машина улучшить 1' or message.text == 'Машина улучшить 1': # команда Машина улучшить (ИД)
if os.path.isfile(f"C://tgplay/{message.chat.id}_avto1.py"):
file = open(f'C://tgplay/{message.chat.id}_avto1.py', 'r')
schet = int(file.read())
file.close
if schet == int('70'):
bot.send_message(message.chat.id, 'Ваша машина уже улучшена до максимум!')
return
file = open(f'c://tgplay/{message.chat.id}_money.py', 'r+')
money = int(file.read())
file.close
if money < int(11000):
bot.send_message(message.chat.id, 'У вас недостаточно средств для улучшения!')
return
else:
file = open(f'c://tgplay/{message.chat.id}_avto1.py', 'r+')
lsid = file.read()
num = int(lsid)
file.seek(0)
file.write(str(num+1))
file.seek(0)
file.close
file = open(f'C://tgplay/{message.chat.id}_money.py', 'r+')
filemoney = int(file.read())
file.seek(0)
file.write(str(filemoney-11000))
file.seek(0)
file.close
# подсчет всего
file = open(f'c://tgplay/{message.chat.id}_money.py', 'r')
itogmoney = int(file.read())
file.close
file = open(f'c://tgplay/{message.chat.id}_avto1.py', 'r')
itogmon = int(file.read())
file.close
bot.send_message(message.chat.id, f'{message.from_user.first_name}, вы успешно улучшили свою машину!\n Добавлено: +1 лошадиных сил.\n Лошадиных сил теперь: ' + str(itogmon) + '!\n? Ваш баланс: ' + str(itogmoney))
else:
bot.send_message(message.chat.id, 'У вас нету машины!')
Когда я пишу команду в боте, он пишет неправильный баланс(изначально на балансе было 20000):
Ваш баланс: 90000
Я не знаю откуда он берёт такое число да ещё и прибавляет, когда нужно было наоброт вычитать, прошу помочь мне! В сфере программирования я новичок
Ответы (1 шт):
Хехе, занимательный случай. В файл и пишется 9000, но поскольку зачем-то применяются r+ и seek(), то в файле ещё остаётся последний 0 от 20000, а '9000'+'0' как раз и получается '90000'.
Решение из комментария: после записи вызвать file.truncate().
PS. Удалил свой предыдущий совет, потому что он в некоторых местах приведет к другим проблемам.
Вообще, работу с файлами тут надо оптимизировать. Не нужно открывать/закрывать файл на каждый чих. Достаточно каждый файл открыть один раз и закрыть когда он больше не нужен. И используйте для работы с файлами конструкцию with open(), тогда файл будет закрыт автоматически.