getData = client_socket.recv(1024).decode('utf-8').split(' ')
Там список хранит данные о rect из pygame, это отрисовка поля
import json
# в словаре для отправки могут быть только числа, строки, bool, списки, словари, None.
# и никаких других объектов. Так что переделываем список rect в список списков.
# как из rect координаты добыть ищи сам
rects_to_send = [ [rect.x, rect.y, rect.w, rect.h] for rect in rectangles ]
data_to_send = { # в словарь можно также добавить другие данные
'rects': rects_to_send,
}
string_to_send = json.dumps(data_to_send, ensure_ascii=True)+'\n'
# дальше через сокет эту строку и передаёшь
import json
received_string = ... # это строка, которую ты получил из сокета
received_data = json.loads(received_string)
#received_data будет таким же словарём, как data_to_send выше
for x, y, w, h in received_data['rects']:
... # рисуешь эти прямоугольники у себя
"RuntimeError: threads can only be started once"
Можно ли это как-то обойти понятным для начинающего в python способом?
Может можно как-то по-другому стартовать, без доп функции?
self.layer_1 = nn.Linear(inp1, inp2) # Почему inp2 ?!
<KeyPress>
и <KeyPress>
, а не просто <Key>
.import binascii, gzip, zlib, sys
def deflate(data, compresslevel=9, strategy=0, wbits=zlib.MAX_WBITS, memlevel=zlib.DEF_MEM_LEVEL):
compress = zlib.compressobj(
compresslevel, # level: 0-9
zlib.DEFLATED, # method: must be DEFLATED
-wbits, # window size in bits:
# -15..-8: negate, suppress header
# 8..15: normal
# 16..30: subtract 16, gzip header
memlevel, # mem level: 1..8/9
strategy # strategy:
# 0 = Z_DEFAULT_STRATEGY
# 1 = Z_FILTERED
# 2 = Z_HUFFMAN_ONLY
# 3 = Z_RLE
# 4 = Z_FIXED
)
deflated = compress.compress(data)
deflated += compress.flush()
return deflated
def inflate(data):
decompress = zlib.decompressobj(
-zlib.MAX_WBITS # see above
)
inflated = decompress.decompress(data)
inflated += decompress.flush()
return inflated
input_data = b"H4sIAAAAAAAA_2SNvU7EMBAG32V7To7txMleB-JKWugsc-wllhI78k8iQLw7sgPVdauZHX0GFX5H7BHMumpnFoJzRIGw03u5muYwG4VovStIIaiT4OLE6gNDuE7GOZq1_SiEdwiZ2wf59Rjy8-vLdnm67Ref_e1t_BxrI2uTtMlp8qF2FlkxLcI1h0Au6RzpX_VStQ1X8li3iZY_IQbVDl3HWX-OOCBEmuf76ucXAAD__wEAAP__grfYVeYAAAA"
gzipped_data = binascii.a2b_base64(input_data.replace(b"_", b"/").replace(b"-", b"+") + b"=")
raw_data = gzip.decompress(gzipped_data)
print('RAW', raw_data)
deflate_stream = gzipped_data[10:]
inflated = inflate(deflate_stream)
print('DEFLATED DATA', deflate_stream)
print('RESTORED DATA', inflated)
print('Restored data matches original:', inflated == raw_data)
for level in range(1, 10):
for strategy in range(0, 5):
for wbits in range(9, 16):
for memlevel in range(1, 10):
test = deflate(raw_data, level, strategy, wbits, memlevel)
if deflate_stream.startswith(test) or test.startswith(deflate_stream):
print(level, strategy, wbits, memlevel)
sys.exit(0)
else:
print('No match found')
for title, batches in items.items():
for batch in batches:
if batch['expiration_date'] and batch['expiration_date'] < today:
expiring_items.append({'title': title, 'expiration_date': batch['expiration_date']})
break # <--- ???
while True: # бесконечный цикл
x_str = input('Введите x:') # вводим число
try: # внутри блока try мы будем отлавливать ошибки - исключения
x = float(x_str) # пробуем преобразовать строку в число
except ValueError: # в случае чего float() выкинет исключение ValueError
print(x_str, 'это не число. Попробуйте ещё раз.') # сообщаем пользователю
else: # если ошибки не было
break # то прерываем цикл, у нас в x лежит нужное значение
# мы делаем break только в ветке else - значит, пока отрабатывает ветка except, цикл продолжится
except ValueError:
print(x_str, 'это не число. У вас есть ещё одна попытка') # сообщаем пользователю
x_str = input('Введите x: ')
x = float(x_str)