function getDescriptionChain(subCats, id) {
for (const subCat of subCats) {
if (subCat.id === id) {
return [subCat.descr];
} else {
const chain = getDescriptionChain(subCat.sub_cats, id);
if (chain.length > 0) {
return [subCat.descr, ...chain];
}
}
}
return [];
}
const subCats = [
{
"parent_id": null,
"sub_cats": [
{
"parent_id": 472,
"descr": "D",
"level": 1,
"id": 508,
"order": 0,
"sub_cats": [
{
"parent_id": 472,
"sub_cats": [
{
"parent_id": 508,
"sub_cats": [
],
"descr": "FOO",
"level": 2,
"id": 1076,
"order": 0
}
],
"descr": "Bar",
"level": 1,
"id": 345,
"sub_cats_ids": [
]
}
]
},
{
"parent_id": 472,
"descr": "E",
"level": 1,
"id": 490,
"order": 1
}
],
"descr": "A",
"level": 0,
"id": 472,
"order": 0
},
{
"parent_id": null,
"sub_cats": [
],
"descr": "B",
"level": 0,
"id": 544,
"order": 1
}
];
const chain = getDescriptionChain(subCats, 1076);
console.log(chain.join(' > ')); // "A > D > Bar > FOO"
Word embedding — (векторное) представление слова
let form1 = document.querySelector('form[name="myform"]');
let form2 = document.querySelector('form[name="myform2"]');
if (form1.onsubmit) {
console.log("Существует обработчик события onsubmit, прикрепленный к form1.");
} else {
console.log("Не существует обработчик события onsubmit, прикрепленный к form1.");
}
if (form2.onsubmit) {
console.log("Существует обработчик события onsubmit, прикрепленный к form2.");
} else {
console.log("Не существует обработчик события onsubmit, прикрепленный к form2.");
}
location /static/ {
access_log off;
expires 30d;
root /path/to/dir;
try_files $uri @zipped;
}
location @zipped {
rewrite ^/static/(.*)\.(doc|docx|xls|xlsx)$ /static/$1.zip redirect;
}
curl -IL https://example.com/static/test.doc
HTTP/2 302
server: nginx
content-type: text/html
content-length: 138
location: https://example.com/static/test.zip
HTTP/2 200
server: nginx
content-type: application/zip
content-length: 29
expires: Thu, 15 Dec 2022 18:31:20 GMT
accept-ranges: bytes
from html.parser import HTMLParser
bufer = '''<p>
<div>hi!
</p>'''
class MyHTMLParser(HTMLParser):
def __init__(self):
super().__init__()
self.open_tags = []
def handle_starttag(self, tag, attrs):
print("Start tag:", tag)
self.open_tags.append((tag, self.getpos()))
def handle_endtag(self, tag):
print("End tag :", tag)
unclosed_tags = []
# ищем, когда был открыт нужный тег
for i in range(len(self.open_tags)-1, -1, -1):
if self.open_tags[i][0] != tag:
unclosed_tags.append(self.open_tags[i])
else:
break
if len(unclosed_tags) == len(self.open_tags): # тег никогда и не был открыт
print(f"Closing tag {tag} has no matching opening tag!")
elif unclosed_tags: # тег был открыт, но он не последний
print("Following tags are not closed properly:\n", '\n'.join(f' {t} at line {line} pos {col+1}' for t,(line, col) in unclosed_tags))
del self.open_tags[-len(unclosed_tags)+1:] # сбрасываем незакрытые теги
else: # тег был открыт, и он последний - всё в порядке
del self.open_tags[-1]
def close(self):
super().close()
print('Processing done')
parser = MyHTMLParser()
parser.feed(bufer)
parser.close()
toCurrency(100500, 'BYN', 'be-BY')
у меня возвращает строку "100 500,00 Br"
toCurrency(100500, 'BYN', 'ru-BY');
с чего начать?
import sys
def enum_classes(module_name: str = __name__):
module = sys.modules[module_name]
return [v for v in vars(module).values() if type(v) is type and v.__module__ == module_name]