Не так, переменная меняется не присвоением ей значения, а за счет парсинга с сайта
old_value = None
while True:
new_value = parse_site() # parse_site() - написанная тобой функция, которая возвращает искомое значение
if old_value is not None and new_value != old_value: # если это не первый раз, и значение изменилось
print('Значение изменилось!')
old_value = new_value # чтобы в следующий раз сравнивать с последним увиденным значением
time.sleep(600) # спим 10 минут, чтобы не долбить сайт запросами
slovar[username] = {"Name":name}
slovar[username] = {"Familia":familia}
slovar[username] = {"Data":ddmmyy}
slovar[username] = {"Nomer":nomer}
slovar[username] = {
"Name":name, # инглиш
"Familia":familia, # рунглиш
"Data":ddmmyy, # рунглиш
"Nomer":nomer, # рунглиш
}
dialogue = dict() # обычный питоновский словарь
# datasource - коллекция строк. Но данные можно читать и построчно из файла
# with open('text.txt', 'rt') as datasource:
datasource = """mom - Hello, do you need anything in the shop?
brother - Yes, bring some fruits
dad - And beer
mom - okey
dad - thx
brother - thx
""".split()
for line in datasource:
actor, _, text = line.split(' - ') # разбиваем строку на две части
if _ is not None: # нашли разделитель, действуем
# если нужного ключа не было, создать его с указанным значением,
# (в нашем случае с новым пустым списком) и вернуть это значение
# а если ключ был, то просто вернуть его значение
actor_lines = dialogue.setdefault(actor.lower(), [])
actor_lines.append(text)
print(dialogue)
from collections import defaultdict
# если у словаря спрашивают неизвестный ключ, он по-тихому
# поместит по этому ключу пустой список, и отдаст этот список
# этот словарь будет хранить результат
dialogue = defaultdict(list) # list - фабрика новых значений
# datasource - коллекция строк. Но данные можно читать и построчно из файла
# with open('text.txt', 'rt') as datasource:
datasource = """mom - Hello, do you need anything in the shop?
brother - Yes, bring some fruits
dad - And beer
mom - okey
dad - thx
brother - thx
""".split()
for line in datasource:
actor, _, text = line.split(' - ') # разбиваем строку на две части
if _ is not None: # нашли разделитель, действуем
# если нужного значения ключа не было, defaultdict сам создаст запрошенный ключ
# так что мы гарантированно получим список
dialogue[actor.lower()].append(text)
print(dialogue)
txt = List_1[0]
txt = # тут твой код
List_1[0] = txt
# файл a.py
def putin():
c = 'punctuati'
c = c * 2
print(c)
# файл b.py
from a import putin
putin()
encoding=eng
лишнее. У тебя код закодировал строку в utf-8 при создании объекта bytes(), так что она оказалась уже дважды закодирована.strange_string = '"message":"\xd0\x9f\xd0\xbb\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb6 \xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd"'
bstring = bytes(ord(c) for c in strange_string) # конструируем строку байт побайтово, из кодов символов в строке
result = bstring.decode('utf-8')
print(result)
cv2_inwrite(/content/2 (1).jpeg, im)
class Test:
a: list = []
Test.a
тоже даст [3]. class Test:
def __init__(self): # конструктор
self.a: list = []
a b b a b a a ....
A b b a b a a ....
a B b a b a a ....
a B a b a a ....
a b A b a a ....
def add_time(self, h: int = 0, m: int = 0, d: int = 0, dw: int = 0, mh: int = 0, y: int = 0):
if any(v < 0 for v in [h,m,d,dw,mh,y]):
raise ValueError()
args = {'h':h, 'm':m, 'd':d, 'dw':dw, 'mh':mh, 'y':y}
bad = list(filter(lambda k: args[k] < 0, args.keys()))
if bad:
raise ValueError('Invalid values for: ' + ','.join(bad))
import functools
import inspect
# пусть чек-функция имеет вид (value) -> bool, и возвращает True для "хороших" значений. Пример:
def not_whitespace(s: str) -> bool:
'String must not contain only whitespace' # док строка будет использоваться в сообщении об ошибке
return bool(s.strip()) # проверяем что строка не состоит из одних пробелов.
# чек-функции можно генерировать и на ходу:
def in_range(low, high):
def check(value):
return (low is None or low <= value) and (high is None or value <= high)
check.__doc__ = f'Value must be between {low} and {high}.'
return check
# теперь сделаем декоратор, который умеет принимать чек-функции и применять их перед вызовом цели
def check(**checks):
def wrapper(func):
sign = inspect.signature(func)
names = list(sign.parameters.keys()) # имена параметров по порядку
not_found = set(checks.keys()) - set(names) # все ли чеки ссылаются на известные параметры?
if not_found:
# у нас есть чек на неизвестный параметр!
raise NameError(', '.join(not_found))
# всё ок, делаем обёртку над функцией
@functools.wraps(func)
def wrapped(*args, **kwargs):
bad = []
for param_name, check_func in checks.items():
idx = names.index(param_name)
if idx < len(args):
# параметр был передан через args
value = args[idx]
if not check_func(value): # вызываем чек-функцию
err = getattr(check_func, '__doc__', '')
if err:
bad.append(f'{param_name} ({err})')
else:
bad.append(param_name)
else:
pass # могут быть хитрости с kwargs-only параметрами. Тут уж извини, мне влом писать.
if bad: # нашли ошибки?
raise ValueError('Bad value for parameters: '+', '.join(bad))
# тут ещё можно помудрить над скрытием последнего фрейма в traceback, но мне опять влом
else: # не нашли, вызываем функцию
return func(*args, **kwargs)
return wrapped
return wrapper
# пример использования
# строка должна быть не из одних пробелов
# число должно быть в пределах от 1 до 10 включительно
@check(s=not_whitespace, n=in_range(1, 10))
def repeat(s: str, n: int) -> str:
return s * n
print(repeat('test ', 3))
try:
print(repeat('test ', 20))
except ValueError as err:
print('yep! it failed!', err)
try:
print(repeat('test ', -1))
except ValueError as err:
print('yep! it failed!', err)
try:
print(repeat(' ', 5))
except ValueError as err:
print('yep! it failed!', err)
try:
print(repeat(' ', 15))
except ValueError as err:
print('yep! it failed!', err)