Как получить определённое число из строки и в дальнейшем изменить его?
Мне нужно получить число "power", которое записано в data.txt. Только не кричите на меня, я впервые имею дело с питоном и этим сайтом.
import vk_api
import random
import time
import datetime
#если вы не знаете что вообще за токен то посмотрите мой первый ролик на эту тему https://www.youtube.com/watch?v=n-b6HJ5R1c4&feature=youtu.be
token = ""
vk = vk_api.VkApi(token=token)
vk._auth_token()
now = datetime.datetime.now()
timeA = now.hour
def construct(id,name,money,power):
p = {}
p["name"] = name
p["money"] = money
p["messegNumb"] = 0
p["power"] = power
data[str(id)] = p
return "normal"
def savebd():
with open("data.txt", "w") as file:
for i in data:#проходимся по data и получаем id в нем
p = str(i) + " " +str(data[i]["name"]) +" " +str(data[i]["money"])+ " " +str(data[i]["messegNumb"])+ " " +str(data[i]["power"])
file.write(p + '\n') #записываем в data.txt построчно пользователей
def loadbd():
file = open("data.txt","r")
datas= file.read()
datas = datas.splitlines()
file.close()
data = {}
for i in datas:
i = i.split()
if len(i)>4:#проверка на полноту данных
data[str(i[0])] = {}
data[str(i[0])]["name"] = i[1]
data[str(i[0])]["money"] = i[2]
data[str(i[0])]["messegNumb"] = i[3]
data[str(i[0])]["power"] = i[4]
return(data)
data = loadbd()#загружаем в переменную data информацию из функции loadbd и файла data.txt
while True:
#добавления монет каждый час пользователя
#часть игровой механики бота
messages = vk.method("messages.getConversations", {"offset": 0, "count": 20, "filter": "unanswered"})
if messages["count"] >= 1:
id = messages["items"][0]["last_message"]["from_id"]
body = messages["items"][0]["last_message"]["text"]
help = "Все команды:\nя - узнать про себя побольше\nтоп - топ 10 дырок\nкупить [кол-во] - купить варбаксы\nдуэль [ставка] - предложить дуэль\nочко - измерить очко\nпоход - найти приключения на задницу\nлавка - глянуть товары в лавке\nник [имя] - сменить ник"
shop = "квазелин - купить вазелин за 10 варбаксов"
shop = shop + "\nкскример - купить скример за 15 варбаксов"
shop = shop + "\nкслаб - купить слабительное за 15 варбаксов"
shop = shop + "\nкпетарда - купить петарду за 25 варбаксов"
shop = shop + "\n--------------------------------------------"
shop = shop + "\nпвазелин - продать вазелин за 10 варбаксов"
shop = shop + "\nпскример - продать скример за 15 варбаксов"
shop = shop + "\nпслаб - продать слабительное за 15 варбаксов"
shop = shop + "\nппетарда - продать петарду за 25 варбаксов"
shop = shop + "\n--------------------------------------------"
shop = shop + "\nкейс - открыть кейс"
shop = shop + "\nсмазать - заюзать вазелин(+5 к удаче при измерении дырки)"
shop = shop + "\nвзорвать - увеличивает очко на 1-10 см"
shop = shop + "\nнапугать {ссылка} - уменьшает очко на 5 см"
shop = shop + "\nскамнуть {ссылка} - украсть 30 варбаксов"
shop = shop + "\nпросраться - заюзать слабительное (снимает кд с похода)"
nick = str(data[str(id)]["name"])
sm = str(data[str(id)]["power"])
money = str(data[str(id)]["money"])
#авторизация пользователя в боте
n = 0
for i in data:
print(i)
if str(id) == i :
n = 1
if n == 0:
construct(id , id , 0 , 0)
#простые команды
if body.lower() == "привет":
vk.method("messages.send", {"peer_id": id, "message": "Привет! Пиши 'помощь' или я нихуя не пойму", "random_id": random.randint(1, 2147483647)})
elif body.lower() == "помощь":
vk.method("messages.send", {"peer_id": id, "message": help, "random_id": random.randint(1, 2147483647)})
elif body.lower() == "лавка":
vk.method("messages.send", {"peer_id": id, "message": shop, "random_id": random.randint(1, 2147483647)})
elif body.lower() == "я":
stat = "это же " + nick
stat = stat + "\nдиаметр очка: " + sm
stat = stat + "см\nварбаксов: " + money
stat = stat + "⍟\n--------------------------------------------\nинвентарь:\nвазелин - N шт.\nкейс - N шт.\nпетарда - N шт.\nскример - N шт.\nноут - N шт.\nслабительное - N шт."
vk.method("messages.send", {"peer_id": id, "message": stat, "random_id": random.randint(1, 2147483647)})
# elif body.lower() == "очко":
elif (bodyone[0] == "ник") and (len(bodyone)>1):
#состовные команды
bodyone = body.lower().split()
if (bodyone[0] == "ник") and (len(bodyone)>1):
data[str(id)]["name"] = bodyone[1] #меняем имя пользователя в боте на новое
vk.method("messages.send", {"peer_id": id, "message": "ник изменен на " + str(bodyone[1]), "random_id": random.randint(1, 2147483647)})
else:
#если бот не нашел команду которую он может выполнить
vk.method("messages.send", {"peer_id": id, "message": "долбаёб, я бот, напиши помощь", "random_id": random.randint(1, 2147483647)})
savebd()
Ответы (2 шт):
Как оказалось из всей простыни вашего кода вам надо ответ на единственный вопрос:
Допустим в файле есть число 0, я должен взять его прибавить к нему определённое число и записать получившееся число в файл вместо 0 Могу я как-то прибавить к значению какое-то число?
Ответ:
f = open ( "data.txt" , "r" )
a=int(f.readline())
f.close()
a=a+1
f = open("data.txt" , "w")
f.write(str(a))
f.close()
Перед выполнением скрипта в файле data.txt записан "0". После выполнения - "1".
Вот теперь вставьте этот ответ в ваш код.
По коду и не скажешь, что вы "впервые имеете дело с Python". Или вы просто его откуда-то бездумно содрали? И еще - если вы первый раз на этом сайте - то откуда вам известно что тут на кого-то "кричат"? Чей-то где-то вы лукавите.
После строки while True: в коде начинается вечный цикл, а данные уже находятся в data для того чтобы добавлять число к определенному power можно написать такую функуцию
def add_power(id, num):
data[str(id)]["power"] = int(data[str(id)]["power"]) + num
savebd() # обновляем файл data.txt
Пример использования:
Допустим есть файл с записью: 97826088 dmitriy 0 0 0
После выполнения скрипта файл будет содержать: 97826088 dmitriy 0 0 1
Код скрипта для теста (после его запуска значение увеличится) делается
это за счет вызова функции add_power так add_power(97826088, 1)
def savebd():
with open("data.txt", "w") as file:
for i in data:#проходимся по data и получаем id в нем
p = str(i) + " " +str(data[i]["name"]) +" " +str(data[i]["money"])+ " " +str(data[i]["messegNumb"])+ " " +str(data[i]["power"])
file.write(p + '\n') #записываем в data.txt построчно пользователей
def loadbd():
file = open("data.txt","r")
datas= file.read()
datas = datas.splitlines()
file.close()
data = {}
for i in datas:
i = i.split()
if len(i)>4:#проверка на полноту данных
data[str(i[0])] = {}
data[str(i[0])]["name"] = i[1]
data[str(i[0])]["money"] = i[2]
data[str(i[0])]["messegNumb"] = i[3]
data[str(i[0])]["power"] = i[4]
return(data)
def add_power(id, num):
data[str(id)]["power"] = int(data[str(id)]["power"]) + num
savebd() # обновляем файл data.txt
data = loadbd()
add_power(97826088, 1)