# этот код изменит твой массив "на месте", а не создаст изменённую копию!
for mas_item in mas: # для каждого словаря в твоем списке
for data_dict in mas_item['data']: # для каждого словаря в списке по ключу data
# словари не любят, когда их модифицируют и проходятся по ним for'ом одновременно
data_dict_keys = list(data_dict.keys()) # так что заранее составляем список ключей словаря
for key in data_dict_keys: # проходимся по этим ключам
data_dict[key] = data_dict[key].replace('_', '') # и обрабатываем значения по этим ключам
import time
import sqlite
connection = sqlite3.connect('bot.db')
cursor = connection.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users ( -- всё что после -- комментарий SQL
id TEXT PRIMARY KEY, -- идентификатор пользователя, он же первичный ключ таблицы
first_use REAL, -- метка времени, когда пользователь впервые обратился к боту
last_use REAL -- метка времени, когда пользователь последний раз обратился к боту
)""")
cursor.close()
def ensure_user_stats(user_id):
"Эта функция обновляет таблицу users, и должна вызываться в начале обработки каждой команды."
global connection
cursor = connection.cursor()
now = time.time()
# пытаемся добавить строку с указанным id, и фиксируем текущее время в полях first_use и last_use
# если возникает конфликт в поле id (такое id уже есть),
# то мы обновляем в этой записи поле last_use на текущее время, а остальное не трогаем
cursor.execute("""INSERT INTO users (id, first_use, last_use) VALUES (?, ?, ?)
ON CONFLICT (id) DO UPDATE SET last_use = excluded.last_use""", (user_id, now, now))
cursor.close()
description = f"""У тебя , **{ctx.author}** вот столько балов!**{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} :polegar_para_cima:**"""
description = f"""У тебя , **{ctx.author}** вот столько балов!**{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} :polegar_para_cima:**"""
score = cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]
description = f"""У тебя , **{ctx.author}** вот столько балов!**{score} :polegar_para_cima:**"""
score = cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id))
score = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.author.id,) )
score = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.author.id,) ).fetchone()[0]
description = f"""У тебя , **{ctx.author}** вот столько балов!**{score} :polegar_para_cima:**"""
score_row = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.author.id,) ).fetchone()
if score_row is not None:
description = f"""У тебя , **{ctx.author}** вот столько балов!**{score_row[0]} :polegar_para_cima:**"""
else:
# что делать, если такого юзера еще нет в базе?
cursor.execute("INSERT INTO users (id, cash) VALUES (?, 0)", (ctx.author.id,) ) # можно его добавить
description = f"""У тебя , **{ctx.author}** пока нет ничего! Но скоро будет!"""
# оба модуля - встроенные, а не сторонние
import inspect
import dis
def callee(x):
our_frame = inspect.currentframe()
our_caller_frame = our_frame.f_back
our_caller = our_caller_frame.f_code
print(f"We are called by {our_caller.co_name}(), at line {our_caller_frame.f_lineno}")
print("Our caller's code goes as following (byte string):")
print(our_caller.co_code)
bytecode = dis.Bytecode(our_caller, first_line=our_caller.co_firstlineno)
print("Or, in human readable form, its this:")
print(bytecode.dis())
return [x*x]
def caller():
print("Calling callee()")
y = callee(2)
print(y)
def other_caller():
print("Calling callee()")
z, *_ = callee(3)
print(z)
caller()
other_caller()
без_повторов = list(set(с_повторами))
set() не становится методом списка или чем-то подобным. Эта идиома прекрасно работает с любым коллекциями - списками, кортежами (tuple), да с чем угодно.for i in range(2):
buttonFrame_update=Button(frame,text="Добавить", command= lambda arg=i: update_main_db(arg))
class MyTableRow(Frame):
def __init__(self, master, *args, **kwargs):
super().__init__(master, *args, **kwargs)
self.widgets = []
for i in range(3):
widget = Entry(frame)
widget.pack(side="left")
self.widgets.append(widget)
self.update_btn = Button(self, text = "Добавить", command = self.update_clicked)
self.update_btn.pack(side="right")
self.delete_btn = Button(self, text = "Удалить", command = self.delete_clicked)
self.delete_btn.pack(side="right")
def update_clicked(self):
print(self.widgets[0].get())
def delete_clicked(self):
print("whatever")
for i in range(2):
item = MyTableRow(doth, borderwidth=2, relief="groove")
frames.append(item)
item.pack(side="top", fill="x")
import uuid
print(hex(uuid.getnode()))
lst=[5, 3, 0, 2, 0, 3, 8, 2, 9, 7, 0, 0, 7, 1, 5, 3]
L = len(lst)
# если в начале списка не 0, то мы сможем задать корректные значения только на обратном ходе
# так что ставим заведомо большее значение счетчика
counter = len(lst) if lst[0] != 0 else 0
for i in range(0, L):
if lst[i] == 0:
counter = 0
else:
counter += 1
lst[i] = counter
# обратный ход
counter = lst[-1] - 1 #чтобы не запороть последние элементы
for i in range(L-1, -1, -1):
if lst[i] == 0:
counter = 0
else:
counter += 1
lst[i] = min(counter, lst[i])
print(lst)
# [2, 1, 0, 1, 0, 1, 2, 3, 2, 1, 0, 0, 1, 2, 3, 4]