Ответы пользователя по тегу Python
  • Как добавить значение в файл json через python?

    @Bright144
    import json
    
    class User:
        def __init__(self, f_name: str) -> None:
            self.f_name = f_name
            with open(self.f_name) as f:
                self.user_list = json.load(f)
            self.users = [i['name'] for i in self.user_list.values()]
            self.last_id = int(list(self.user_list.keys())[-1])
    
        def add_users(self, name: str, lakes: int) -> None:
            if name not in self.users:
                self.users.append(name)
                self.last_id += 1
                self.user_list[str(self.last_id)] = {'name': name, 'lakes': lakes}
                with open(self.f_name, 'w') as f:
                    json.dump(self.user_list, f)
            else:
                print(f'Пользователь с именем {name} уже существует')
    
    
    users = User('users.json')
    users.add_users('Derill', 23)
    users.add_users('David', 21)
    Ответ написан
    Комментировать
  • Как создать свой JSON и получить доступ к значению по ключу?

    @Bright144
    Так в str не возможно получить доступ по ключи.
    Это не правильно:
    import json
    answer = {
            "id": "12",
            "status": "Готов",
            "url": "vk.com"
        }
    answer = json.dumps(answer, ensure_ascii=False).encode('utf-8')     #здесь ты переобразуешь str на bytes
    answer = str(answer.decode('utf-8'))                                #здесь обратно в str
    
    print(type(answer))                                                 #вот тип который ты хочешь получить доступ по ключи

    Вот это правильно:
    import json
    answer = {
            "id": "12",
            "status": "Готов",
            "url": "vk.com"
        }
    answer = json.dumps(answer, ensure_ascii=False)
    answer = json.loads(answer)                         #здесь ты переобразуешь json на данный
    
    print(answer['id'])                                 #получаем данные по ключи
    Ответ написан
    Комментировать
  • Почему мой код считается медленным?

    @Bright144
    попробуй это
    class Solution:
        def topKFrequent(self, nums: List[int], k: int) -> List[int]:
            return sorted(set(nums), key=nums.count, reverse=True)[:k]

    leetcode у нас заблокирован. По теории так скорость выполнение кода должен значительно вырасти(почти 2раза).
    Самый быстрый код это тот код когда решаешь всю задачу за один цикл(это мое мнение).
    У тебя тут:
    цикл для d;
    цикл для s;
    цикл для result;
    В итоге 2 лишних циклов.
    Ответ написан
    Комментировать
  • Как проверить есть ли элемент в списке кортежей?

    @Bright144
    a = [('Илья',), ('Машка',)]
    b = "Машка"
    for i in a:
        if b in a:
            print(True)
            break

    если у тебя кортедж слишком глубокий можешь использовать вот такую функцию
    from functools import reduce
    
    def check(txt, tup):
        types = [list, set, tuple]
        while tup:
            if txt in tup:
                return True
            tup = [i for i in tup if type(i) in types]
            tup = reduce(lambda x,y: list(x) + list(y), tup)
        return False
    
    
    a = ((1),(2, ('asd', ('qwer', 1, "Машка"))))
    b = "Машка"
    print(check(b, a))
    Ответ написан
    Комментировать
  • Как узнать нажата ли клавиша клавиатуры?

    @Bright144
    import win32api
    import time
    
    while True:
        if win32api.GetAsyncKeyState(ord('A')):
            print('Нажато A')
        time.sleep(0.5)

    можешь контролировать скорость реакции с помаши time.sleep.
    Плюс win32api в том что ему не важен на ком языке ты вводишь или нажимаешь.
    Ответ написан
  • Как извлечь нужный текст из строки Python?

    @Bright144
    Это выводить только одну совпадение в тексте:
    import re
    
    txt = '[Win32Window(hWnd=123456)]'
    r = re.compile(r'\[Win32Window\(hWnd=(\d+)\)]')
    result = r.match(txt)[1]
    print(result)

    Это выводить всех совпадение в тексте:
    import re
    
    txt = '[Win32Window(hWnd=123456)]ahjkffkfk[Win32Window(hWnd=12)]asdfg[Win32Window(hWnd=)]'
    r = re.compile(r'\[Win32Window\(hWnd=(\d+)\)]')
    result = r.findall(txt)
    for i in result:
        print(i)
    Ответ написан
    Комментировать
  • Баг с змейкой она умирает раньше чем коснулась края экрана?

    @Bright144
    Вот рабочий код
    Змейка

    import pygame
    from random import randrange
    import keyboard
    
    class Control:
        def __init__(self, dirs: dict, x_y: list, key: str) -> None:
            self.dirs = dirs
            self.x_y = x_y
            self.key = key
    
        def __call__(self, _):
            if self.key == 'W' and self.dirs['W']:
                self.x_y[:] = [0, -1]
                self.dirs.update({'W': True, 'S': False, 'A': True, 'D': True, })
            if self.key == 'S' and self.dirs['S']:
                self.x_y[:] = [0, 1]
                self.dirs.update({'W': False, 'S': True, 'A': True, 'D': True, })
            if self.key == 'A' and self.dirs['A']:
                self.x_y[:] = [-1, 0]
                self.dirs.update({'W': True, 'S': True, 'A': True, 'D': False, })
            if self.key == 'D' and self.dirs['D']:
                self.x_y[:] = [1, 0]
                self.dirs.update({'W': True, 'S': True, 'A': False, 'D': True, })
            print(self.dirs)
    
    
    def run_ctrl():
        up = Control(dirs, x_y, 'W')
        down = Control(dirs, x_y, 'S')
        left = Control(dirs, x_y, 'A')
        right = Control(dirs, x_y, 'D')
        keyboard.on_press_key('W', up)
        keyboard.on_press_key('S', down)
        keyboard.on_press_key('A', left)
        keyboard.on_press_key('D', right)
    
    
    RES = 800
    SIZE = 80
    
    x, y = randrange(0, RES, SIZE), randrange(0, RES, SIZE)
    apple = randrange(0, RES, SIZE), randrange(0, RES, SIZE)
    dirs = {'W': True, 'S': True, 'A': True, 'D': True, }
    length = 1
    snake = [(x, y)]
    x_y = [0, 0]
    dx, dy = 0, 0
    score = 0
    fps = 1
    
    pygame.init()
    sc = pygame.display.set_mode([RES, RES])
    clock = pygame.time.Clock()
    font_score = pygame.font.SysFont('Arial', 26, bold=True)
    font_end = pygame.font.SysFont('Arial', 66, bold=True)
    
    run_ctrl() #управление
    
    while True:
        dx, dy = x_y    #передача значение управление
        sc.fill(pygame.Color('black'))
    
        # Счёт
        render_score = font_score.render(f'SCORE: {score}', 1, pygame.Color('orange'))
        sc.blit(render_score, (5, 5))
        # Движение змейки
        x += dx * SIZE
        y += dy * SIZE
        snake.append((x, y))
        snake = snake[-length:]
        # отрисовка
        [(pygame.draw.rect(sc, pygame.Color('green'), (i, j, SIZE - 2, SIZE - 2))) for i, j in snake]
        pygame.draw.rect(sc, pygame.Color('red'), (*apple, SIZE, SIZE))
        # Скушать яблочко
        if snake[-1] == apple:
            apple = randrange(0, RES, SIZE), randrange(0, RES, SIZE)
            length += 1
            fps += 0.1
            score += 1
    
        # game over
        if x < 0 or x > RES - SIZE or y < 0 or y > RES - SIZE or len(snake) != len(set(snake)):
            while True:
                render_end = font_end.render('GAME OVER', 1, pygame.Color('orange'))
                sc.blit(render_end, (RES // 2 - 180, RES // 2.5))
                pygame.display.flip()
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        exit()
    
        pygame.display.flip()
        clock.tick(fps)
    # закрытие приложения
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()


    я не знакомый с pygame, но у тебя с управлением не все гладко по этому использовал модуль keyboard. У тебя змейка слушает команду после 1 клеток, то есть оно реагирует на команду позже. Это видно если заданный fps понизить на 1. Эту проблему можно решить если отрисовку поставить после движении. Но у тебя еще одна проблема, яблоки появляются прямо из тело змея.
    Ответ написан
    Комментировать
  • Не могли бы вы оценить мой код на Python?

    @Bright144
    class Pers:
    
        def __init__(self, Name: str, HP: int, Rang: str) -> None:
            self.Name = Name
            self.HP = HP
            self.Rang = Rang
    
        def print_stat(self):
            print(self.__dict__)
    
    аvailable_locations = ["Chaes", "Kordon"]    #Доступные локации
    print(f"Welcome to колхозный S.T.A.L.K.E.R ёпт\nДоступные локации:{аvailable_locations}\n")       #Выводит список доступных локаций
    a = input("Введите локацию: Пример(Kordon)\n>")
    territory = {a: "Территория обитания меченого"}                  #Словарь в котором записана локация она понадобится для улсовных операторов
    print("==============================================================")
    
    if "Chaes" in territory:
        monolit = [Pers("Monolit", 120, "Master") for i in range(20)]
        [i.print_stat() for i in monolit]
        print("Уууууу ты нарвался на монолитов")
    elif "Kordon" in territory:
        odinochki = [Pers("Stalker", 100, "Noob") for i in range(10)]
        [i.print_stat() for i in odinochki]
        print("\n")
        mut = [Pers("Psevdosobaki", 90, "None") for i in range(5)]
        [i.print_stat() for i in mut]
        print()
        print("Не мельтеши особо и трогать тебя не будут ")
    print("==============================================================")
    pl = input()     #Это для того чтоб после завершения программы консоль сразу не выкидывала

    персонажов лучше сделать объектами, потом с легкости можешь добавить функционал или статы на классе Pers. На пример стат брони, урона, метод нанесение и получение урона.
    Ответ написан
    Комментировать
  • Как усовершенствовать код?

    @Bright144
    держи
    d = {'5':["Сегодня больше отличников", 0],
        '4': ["Сегодня больше хорошистов", 0],
        '3': ["Сегодня больше троечников", 0]} #ученики с оценкой 3, 4, 5
    
    students = int(input("Введите количество учеников:"))
    print()
    for grade in range(1, students+1):
        print(f'{grade}-й из {students} учеников')
        students_grade = input("Какую оценку ученик получил?:")
        d[students_grade][1] += 1
        print()
    
    print(max(d.items(), key=lambda x: x[1][1])[1][0])
    print("\nКоличество учеников,получивших 5:", d['5'][1], ";", "Количество учеников,получивших 4:", d['4'][1], ";", "Количество учеников,получивших 3:", ";", d['3'][1])
    Ответ написан
    2 комментария
  • №5 ЕГЭ по информатике?

    @Bright144
    Вот решение:
    cnt = 0
    for n in range(1, 1000):
        n = n << 1 ^ (n.bit_count() > n.bit_length() - n.bit_count()) #добавляем в конец 1 или 0
        bit_l = n.bit_length()              #длина битов
        del_bit_l = 2 + bit_l%2               #длина удаляемого бита
        l_r = int((bit_l - del_bit_l)/2)    #длина левого и правого бита
        l_bit = n >> bit_l - l_r << l_r     #левый бит
        r_bit = n&2**l_r - 1                   #правый бит
        r = l_bit|r_bit
        if 50 <= r <= 100:
            cnt += 1
    print(cnt)

    Тут главное n не должен быт 0 или -1. Но это тоже можно решать поставив условие. В r получаешь выходной данный который описал в алгоритме.
    Ответ написан
  • Как достать отдельно каждое слово из строки?

    @Bright144
    string = 'город-статистика 1'
    l = string.replace('-', ' ').split()
    print(l)
    Ответ написан
  • VsCode не видит некоторые библиотеки python?

    @Bright144
    Нажимай сочетание клавиш ctrl + , в поиске настройки пиши terminal, выбери Python и
    поставь галочки как в этом скриншоте:
    6421e559d6e3c261962479.png
    Ответ написан
  • Charmap' codec can't decode byte 0x98 in position 169: character maps to?

    @Bright144
    Проблема в кодировке. Попробуй указать кодировку при открытие файла:
    with open("index.html", encoding="UTF-8") as file:
        template = file.read()
    Ответ написан
    1 комментарий
  • Можно ли сделать обработку нажатия клавиш в одном потоке?

    @Bright144
    Это можно сделать с помощи pywin32.
    pip install pywin32
    Вот пример на нажатие клавиши "A":

    import win32api
    import time
    
    while True:
        if win32api.GetAsyncKeyState(ord('A')):
            print('A')
        time.sleep(0.5)

    Это будет реагировать на нажатие A в Windows.
    Ответ написан
    Комментировать
  • Как разделить строку на три части?

    @Bright144
    sp = len(string)//3
    p1 = string[:sp]
    p2 = string[sp:2*sp]
    p3 = string[2*sp:]

    p1, p2, p3 это три части строки.
    Ответ написан
    2 комментария
  • Как сделать при вводе нескольких слов через запятую, чтобы каждое слово сохранялось в переменную (количество слов не определенно)?

    @Bright144
    Для "Янкав, Сер, Заводск" это достаточно:
    string = "Янкав, Сер, Заводск"
    a = string.split(', ')
    print("Это через цикл:")
    for i in a:
        print(i)
    print('\nЭто в ручную:')
    print(a[0])
    print(a[1])
    print(a[2])

    Еще можешь использовать словарь.
    Если хочешь присвоит именно в переменную, тогда тебе придется генерировать файл и импортировать в программу каждый раз. А это с точки зрении программирование не разумно.
    Ответ написан
    Комментировать
  • Как в Python выводить код на то же место?

    @Bright144
    используй:
    print('Text', end='\r')

    Добавляй в каждом принте второй аргумент end='\r'.
    По умолчание оно стоит end='\n'
    Ответ написан