• Как проверить строку на соответствие шаблону?

    TalismanChet
    @TalismanChet
    Лицо зла
    f”{srt}x{str}x{float}-{str}:{int}x{int}₽» что это? восприму это как: "<str>x<str>x<float>-<str>:<int>x<int>₽»"

    В таком случае, можно сделать так:

    import re
    
    
    ...
    
    def teststr(data: str):
        floatre = r"([0-9](?:_?[0-9])*\.(?:[0-9](?:_?[0-9])*)?|\.[0-9](?:_?[0-9])*)"
        intre = r"(0[xX](?:_?[0-9a-fA-F])+|0[bB](?:_?[01])+|0[oO](?:_?[0-7])+|(?:0(?:_?0)*|[1-9](?:_?[0-9])*))"
        strre = r"([^'\\]*(?:\\.[^'\\]*)*'|[^\"\\]*(?:\\.[^\"\\]*)*\")"
        regex = re.compile(r"[a-zA-Z]+x[a-zA-Z]+x"+floatre+r"-[a-zA-Z]+:"+intre+r"x"+intre+r"₽»")
        return re.match(regex, data)
    
    ...
    Ответ написан
    Комментировать
  • Как добавить Linux Ubuntu в Windows Boot Manager?

    TalismanChet
    @TalismanChet
    Лицо зла
    Легче Grub4DOS или просто Grub поставить и настроить загрузку для сколь угодно любых операционок
    Ответ написан
    Комментировать
  • Не понимаю в чем ошибка?

    TalismanChet
    @TalismanChet
    Лицо зла
    Зачем для этого вообще нужны группы? всегда без них обходился. я вот что скажу: рисуй фон дважды:

    class Background(dict):
        def __init__(self, image, x=0):
            self['i'], self['x'] = image, x
            pass
        def draw(self, surface):
            surface.blit(self['i'], (self['x'], 0))
            surface.blit(self['i'], (self['x']-self['i'].get_width(), 0))
            self['x'] += 1
            if self['x'] >= self['i'].get_width(): x = 0
            pass
        pass
    Ответ написан
    Комментировать
  • Как разложить вложенные массивы в одномерный?

    TalismanChet
    @TalismanChet Автор вопроса
    Лицо зла
    Я сам решил задачу. В случае неверной структуры массива, возбуждается RuntimeError. Эта будет чуть оптимизированнее чем у denislysenko.
    def flatten(array: list):
        def popen(arr: list | tuple):
            if not arr or not arr[0]:
                return arr
            while type(arr[0]) in (tuple, list):
                arr = arr[0]
                pass
            return arr
        if len(array) in (0, 1):
            return popen(array)
        if type(array[0]) == str:
            if type(array[1]) == list:
                return [array[0], *flatten(array[1:])]
                pass
            return array
        raise RuntimeError
    Ответ написан
    Комментировать
  • Есть ли аналог self в функциях?

    TalismanChet
    @TalismanChet
    Лицо зла
    def foo(self, *args, **kwargs):
        print(self.__name__)
        pass
    foo(foo, "egg", "bar")
    Ответ написан
    Комментировать
  • Какую ОС подобрать для этого ноутбука?

    TalismanChet
    @TalismanChet
    Лицо зла
    Slax Linux.
    Ответ написан
    Комментировать
  • Как можно реализовать загрузчик OC на жёсткий диск и добавить в список oc на NASM и C?

    TalismanChet
    @TalismanChet
    Лицо зла
    Смотря для какого железа делаете ОС.
    Если для старого, возможно, придется использовать NASM или какой-нибудь другой ассемблер,
    а если для нового, то UEFI - лучший способ.
    Ответ написан
    Комментировать
  • Как решить проблему indentation error?

    TalismanChet
    @TalismanChet
    Лицо зла
    в 20й строке 2 лишних пробела перед bot
    кстати, в 27й тоже
    Ответ написан
  • Как поставить функцию write в str значение?

    TalismanChet
    @TalismanChet
    Лицо зла
    c = i
    поменяй на
    c = str(i)
    Ответ написан
    Комментировать
  • Почему изменение переменной в списке не затрагивает переменную вне этого списка?

    TalismanChet
    @TalismanChet
    Лицо зла
    from random import randrange
    a, b, c = 4, 6, 8
    r = ['a', 'b', 'c']
    exec("{} = 1".format(r[randrange(0, 3)]))
    print(a, b, c, r)

    и всё должно сработать
    Ответ написан
    1 комментарий
  • Каким образом сделать переключение языка?

    TalismanChet
    @TalismanChet
    Лицо зла
    def detect(text):
        k  = 10 # koefficient
        ru = 'абвгдежзиклмнопрстуфхцчщьыъэюя'
        en = 'abcdefghijklmnopkrstuvwxyz'
        cd = '[]{}()_=+/\\|@#$%^&*'
        ru_c = 0 # c - chance
        en_c = 0 # c - chance
        cd_c = 0 # c - chance
        max_cd_syms = 1 # syms - symbols
        for s in str(text.casefold()): # str() for refuse some chance of exception
            if s in ru:
                ru_c += 1
                continue
            if s in en:
                en_c += 1
                cd_c += .5
                continue
            if s in cd:
                cd_c += (max_cd_syms*len(text)//k)
                continue
            pass
        #print(ru_c, en_c, cd_c) # debug
        if ru_c > en_c and ru_c > cd_c:
            return 'ru'
        if en_c > ru_c and en_c > cd_c:
            return 'en'
        if cd_c > ru_c and cd_c > en_c:
            return 'code'
        return 'mixed'
    #
    text1 = '''Минобороны показало уничтожение высокоточным оружием артиллерийской батареи'''
    text2 = '''O curse of marriage!
    
    That we can call these delicate creatures ours,
    
    And not their appetites! I had rather be a toad
    
    And live upon the vapour of a dungeon
    
    Than keep a corner in the thing I love
    
    For others' uses.'''
    text3 = '''_tabversion = '3.10'
    
    _lr_method = 'LALR'
    
    _lr_signature = 'amper apos back bux colon comma comment dog dot equ expl flex float ignore int lang lblc lfig lpar minus multilinecomment name newline percent plus rang rblc rfig rpar semi sharp slash star str tildeline : preptag\n                 | assign\n                 | func\n                 | cyclepreptag : sharp lblc name rblc\n                    | sharp lblc name colon name rblc\n                    | sharp lblc name colon int rblcassign : name equ expr\n                   | name equ namefunc : name lpar args rpar\n                 | name lpar rparexpr : intcycle : name lpar args rpar lfig rfigargs : name\n                 | expr\n                 | name comma args\n                 | expr comma args'
        
    _lr_action_items = {'sharp':([0,],[6,]),'name':([0,8,9,10,20,21,23,],[7,11,12,15,24,15,15,]),'$end':([1,2,3,4,5,12,13,14,17,19,22,29,30,31,],[0,-1,-2,-3,-4,-9,-8,-12,-11,-5,-10,-6,-7,-13,]),'lblc':([6,],[8,]),'equ':([7,],[9,]),'lpar':([7,],[10,]),'int':([9,10,20,21,23,],[14,14,25,14,14,]),'rpar':([10,14,15,16,18,26,28,],[17,-12,-14,22,-15,-16,-17,]),'rblc':([11,24,25,],[19,29,30,]),'colon':([11,],[20,]),'comma':([14,15,18,],[-12,21,23,]),'lfig':([22,],[27,]),'rfig':([27,],[31,]),}
    
    _lr_action = {}
    for _k, _v in _lr_action_items.items():
       for _x,_y in zip(_v[0],_v[1]):
          if not _x in _lr_action:  _lr_action[_x] = {}
          _lr_action[_x][_k] = _y
    del _lr_action_items
    
    _lr_goto_items = {'line':([0,],[1,]),'preptag':([0,],[2,]),'assign':([0,],[3,]),'func':([0,],[4,]),'cycle':([0,],[5,]),'expr':([9,10,21,23,],[13,18,18,18,]),'args':([10,21,23,],[16,26,28,]),}
    
    _lr_goto = {}
    for _k, _v in _lr_goto_items.items():
       for _x, _y in zip(_v[0], _v[1]):
           if not _x in _lr_goto: _lr_goto[_x] = {}
           _lr_goto[_x][_k] = _y
    del _lr_goto_items
    _lr_productions = [
      ("S' -> line","S'",1,None,None,None),
      ('line -> preptag','line',1,'p_line','lexyac.py',197),
      ('line -> assign','line',1,'p_line','lexyac.py',198),
      ('line -> func','line',1,'p_line','lexyac.py',199),
      ('line -> cycle','line',1,'p_line','lexyac.py',200),
      ('preptag -> sharp lblc name rblc','preptag',4,'p_preptag','lexyac.py',203),
      ('preptag -> sharp lblc name colon name rblc','preptag',6,'p_preptag','lexyac.py',204),
      ('preptag -> sharp lblc name colon int rblc','preptag',6,'p_preptag','lexyac.py',205),
      ('assign -> name equ expr','assign',3,'p_assign','lexyac.py',209),
      ('assign -> name equ name','assign',3,'p_assign','lexyac.py',210),
      ('func -> name lpar args rpar','func',4,'p_func','lexyac.py',214),
      ('func -> name lpar rpar','func',3,'p_func','lexyac.py',215),
      ('expr -> int','expr',1,'p_expr','lexyac.py',219),
      ('cycle -> name lpar args rpar lfig rfig','cycle',6,'p_cycle','lexyac.py',223),
      ('args -> name','args',1,'p_args','lexyac.py',227),
      ('args -> expr','args',1,'p_args','lexyac.py',228),
      ('args -> name comma args','args',3,'p_args','lexyac.py',229),
      ('args -> expr comma args','args',3,'p_args','lexyac.py',230),
    ]'''
    #
    print(detect(text1), detect(text2), detect(text3))
    #
    input()

    Элементарно. Функция не идеальна, но если хотите полноценный ИИ для этих целей - напишите в комментах к ответу.
    Ответ написан
    2 комментария
  • Как создать функцию перезапускающую игру?

    TalismanChet
    @TalismanChet
    Лицо зла
    При выполнении нужного условия запуск себя потом завершение работы, псевдопример:
    #main.py
    import sys, os
    ...
    if restart:
        os.startfile('main.py'+' '.join(sys.argv))
        # или os.system('python main.py'+' '.join(sys.argv[1:]))
        #если запускаешь как python main.py ...
        sys.exit(0)
        pass
    ...
    Ответ написан
    Комментировать
  • Invalid literal for int() with base 10:instagram,как исправить?

    TalismanChet
    @TalismanChet
    Лицо зла
    Можете, пожалуйста, предоставить код всего модуля, не то не ясно, какое содержимое в followers_count и откуда оно там взялось.
    Ответ написан
  • Как боту дискорд подсчитать слова в сообщении Python?

    TalismanChet
    @TalismanChet
    Лицо зла
    Берете текст сообщения и делаете с ним words = msg.split(' '),
    после чего берете длинну полученного списка с помощью words_count = len(words). Это и есть кол-во слов в сообщении.
    Ответ написан
    Комментировать
  • Как сделать коллизию между гранатой и полом в pygame?

    TalismanChet
    @TalismanChet
    Лицо зла
    Давайте представим ситуацию: изображение гранаты перекрыло изображение земли:

    Пусть Rect земли = Rect(0, 90, 100, 10) с окном 100х100рх

    Случай 1.

    Пусть х и у гранаты хранятся отдельно.
    Тогда нужно создать новый Rect с координатами гранаты и размером желаемого хитбокса. Если включить отрисовку такого Rect'а, то можно увидеть такую картину:

    6224b13196b27565859800.png

    То есть, это и есть хитбокс гранаты.

    Далее мы должны взять каждую точку хитбокса на картинке (это хорошо работает с маленькими целевыми и большими проверяющими хитбоксами, если бы земля была маленькой, а граната - огромной, то проверку нужно было бы делать и от земли к гранате и от гранаты к земле) и сравнить перекрывание с хитбоксом земли:
    groundRect.collidepoint(granadeRectPoint)
    # True если перекрывается

    А далее можно производить требуемые действия, например, уничтожить экземпляр гранаты или обнулить её вектор движения.

    Случай 2.

    Пусть х и у гранаты равны х и у изображения.
    Тогда нужно извлечь Rect с координатами гранаты из изображения:

    granadeRect = granadeImage.get_rect()

    Если включить отрисовку такого Rect'а, то можно увидеть такую картину:

    6224b13196b27565859800.png

    То есть, это и есть хитбокс гранаты.

    Далее мы должны взять каждую точку хитбокса на картинке (это хорошо работает с маленькими целевыми и большими проверяющими хитбоксами, если бы земля была маленькой, а граната - огромной, то проверку нужно было бы делать и от земли к гранате и от гранаты к земле) и сравнить перекрывание с хитбоксом земли:
    groundRect.collidepoint(granadeRectPoint)
    # True если перекрывается

    А далее можно производить требуемые действия, например, уничтожить экземпляр гранаты или обнулить её вектор движения.
    Ответ написан
    Комментировать
  • Как реализовать управление под андроид на pygame?

    TalismanChet
    @TalismanChet
    Лицо зла
    Управление на андроид работает почти также, как на ПК, только вместо MOUSBUTTONDOWN там FINGERDOWN, а вместо MOUSEBUTTONUP - FINGERUP. Если же нужна информация по типу "как сделать свайп в pygame на Android", то переформулируйте вопрос.
    Ответ написан
    Комментировать
  • Как реализовать гравитацию и коллизию с такой структурой?

    TalismanChet
    @TalismanChet
    Лицо зла
    возьмите Rect изображения бомбы и для каждой точки этого Rect'а top_left, top_right, top, left, right, bottom_left, bottom_left, center проверьте коллайд с, например, Rect'ом земли или персонажа с помощью Rect.collidepoint(point) -> bool вернет True при коллизии
    Ответ написан
    Комментировать
  • С помощью чего и как можно стилизовать счетчик на pygame?

    TalismanChet
    @TalismanChet
    Лицо зла
    1. Эта задача выполнима, не понял причины этого вопроса.
    2. Я написал пример программы с счетчиком(как его использовать, понять не сложно)
    import threading, sys
    from pygame import *
    font.init()
    
    def thread(func):
        def _sugar(*args) -> threading.Thread:
            ret = threading.Thread(target = func, args = [*args,])
            ret.start()
            return ret
        return _sugar
    
    class Counter(object):
        def __init__(s, w, h, bind, fg = Color(0, 255, 0), bg = Color(0, 0, 0),value=0, fnt = font.SysFont(None, 14)):
            s.w,\
                  s.h,\
                  s.fg,\
                  s.bg,\
                  s.vl,\
                  s.fnt =\
                  w,h,fg,bg,value,fnt
            s.bnd = bind
            pass
        def increase(s, step = 1):
            s.vl += step
            pass
        def decrease(s, step = 1):
            s.vl -= step
            pass
        def render(s):
            ret = Surface((s.w, s.h), HWSURFACE|SRCALPHA)
            ret.fill(s.bg)
            ret.blit(transform.smoothscale(s.fnt.render(str(s.vl), 1, s.fg), ret.get_size()), (0, 0))
            return ret
        @thread
        def bnd(s):
            pass
        pass
    #
    @thread
    def bind(counter, event):
        if event.type in (MOUSEBUTTONDOWN, MOUSEBUTTONUP):
            counter.increase()
            pass
        pass
    #
    def main(argv):
        display.init()
        font.init()
        sc = display.set_mode((800, 600), HWSURFACE|SRCALPHA)
        counter = Counter(600, 400, bind, fnt = font.SysFont(None, 1024))
        ticker = time.Clock()
        target_FPS = 120
        real_FPS = 0
        while True:
            ticker.tick(target_FPS)
            real_FPS = ticker.get_fps()
            for e in event.get():
                if e.type == QUIT:
                    display.quit()
                    quit()
                    sys.exit()
                    pass
                counter.bnd(counter, e)
                pass
            sc.fill((255,100,100))
            sc.blit(counter.render(), (100, 100))
            display.flip()
            display.set_caption(f"Clicker based on counter [FPS: {int(real_FPS)}]")
            pass
        pass
    
    if __name__ == '__main__':
        main(sys.argv)
        pass
    Ответ написан
    Комментировать
  • Не получается создать персонажа с помощью класса?

    TalismanChet
    @TalismanChet
    Лицо зла
    Вы используете image как аргумент для Flopa.__init__,
    просто поменяйте
    def __init__(self, image, x, y,):
    на
    def __init__(self, _image, x, y,):
    и вместо
    self.image = transform.scale(image.load("flopa.png"), (50, 50))

    используйте
    self.image = transform.scale(image.load(_image), (50, 50))

    Tакже, у вас имеется излишняя запятая здесь:
    def __init__(self, image, x, y>>,<<)
    Ответ написан
    Комментировать