Профиль пользователя заблокирован сроком с 12 апреля 2022 г. и навсегда по причине: спам
  • Алгоритм рандома при котором чем больше число тем ниже шанс его выпадения?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    У random.choices есть возможность задавать "вес" для элементов. Например:
    import random
    
    item_chances = {
        'item_1': 10,
        'item_2': 30,
        'item_3': 50,
        'item_4': 70,
        'item_5': 90
    }
    
    selected = random.choices(
        list(item_chances.keys()), weights=list(item_chances.values()), k=5000)
    
    for item in set(selected):
        print(f'{item}: {selected.count(item)}')

    Здесь у item_1 самый маленький вес, то есть самый маленький шанс выпадения этого значения, в то время как у item_5 самый высокий. Аргумент k указывает сколько элементов нужно выбрать. В данном случае 5000 я выбрал для теста. Вывод:
    item_1: 175
    item_2: 578
    item_3: 1001
    item_4: 1458
    item_5: 1788

    Как видишь все сходится и "предметы" выпадали согласно их "весу".
    Ответ написан
    8 комментариев
  • Как устроен Python. Мэтт Харрисон. Хорошая ли книга?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Да. Нет.
    Ответ написан
    Комментировать
  • Типы данных это классы в ООП?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Да
    Ответ написан
    Комментировать
  • Как во flask сделать приватный get/post запрос?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Токены нужно передавать с клиента в заголовках, а на сервере использовать валидацию для роутов, например с flask-jwt-extended

    Минимально рабочий вариант:
    from flask import Flask, request, jsonify
    from flask_jwt_extended import (
        JWTManager,
        create_access_token,
        jwt_required,
        get_jwt_identity
    )
    
    app = Flask(__name__)
    
    app.config['SECRET_KEY'] = 'super-secret'
    app.config['JWT_SECRET_KEY'] = app.config['SECRET_KEY']
    app.config['JWT_ACCESS_TOKEN_EXPIRES'] = False
    
    jwt = JWTManager(app)
    
    users = ['kshnkvn']
    
    
    @app.route('/login', methods=['POST'])
    def login():
        user = request.json.get('user')
    
        if user not in users:
            return jsonify(
                {'status': False, 'result': 'User not exists'})
        else:
            return jsonify(
                {'status': True, 'result': create_access_token(identity=user)})
    
    
    @app.route('/user', methods=['GET'])
    @jwt_required
    def user():
        user = get_jwt_identity()
        return jsonify({'status': True, 'result': user})
    
    
    if __name__ == '__main__':
        app.run(debug=True, port=6061)


    В итоге если шлем запрос на /user без заголовка с авторизацией, то получаем в ответ:
    {
        "msg": "Missing Authorization Header"
    }

    Для получения токена отправляем POST запрос на /login где в теле запроса отправляем JSON с именем пользователя, а в ответ получаем токен:
    {
        "status": true,
        "result": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MDYzOTk0NjcsIm5iZiI6MTYwNjM5OTQ2NywianRpIjoiMTgxZmY2ZGQtN2FmNS00ZTUxLTlhMzAtODA3MTNhYzNlZGJlIiwiaWRlbnRpdHkiOiJrc2hua3ZuIiwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.DwzxBd-6Hz1Gg6O-7JIoFrBm_XzCoiOD6xIRhFUjG0Q"
    }

    После этого в каждый запрос добавляем заголовок
    "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MDYzOTk0NjcsIm5iZiI6MTYwNjM5OTQ2NywianRpIjoiMTgxZmY2ZGQtN2FmNS00ZTUxLTlhMzAtODA3MTNhYzNlZGJlIiwiaWRlbnRpdHkiOiJrc2hua3ZuIiwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.DwzxBd-6Hz1Gg6O-7JIoFrBm_XzCoiOD6xIRhFUjG0Q"
    и заходим на нужную ссылку, например для /user будет следующий ответ:
    {
        "status": true,
        "result": "kshnkvn"
    }
    Ответ написан
    2 комментария
  • Как вывести количество повторений значений словаря в списке с вложенными словарями?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    students = [
        {'first_name': 'Вася'},
        {'first_name': 'Петя'},
        {'first_name': 'Маша'},
        {'first_name': 'Маша'},
        {'first_name': 'Петя'},
    ]
    
    names = dict()
    
    for student in students:
        if student['first_name'] not in names.keys():
            names[student['first_name']] = 1
        else:
            names[student['first_name']] += 1
    
    for name, count in names.items():
        print(f'{name}: {count}')


    Можно еще так:
    names = [s['first_name'] for s in students]
    
    for name in set(names):
        print(f'{name}: {names.count(name)}')
    Ответ написан
    2 комментария
  • Как получить список без указанных елементов?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    import re
    
    foo = '1. 4x Apples. \n2. 5x Bananas \n3. 6x Oranges\n4. 3x Pears\n'
    bar = '1. Ice cream \n2. Rice \n3. Flour\n4. Cola\n'
    
    def to_list(s):
        return re.findall(r'\d+\.\s(.+?)(?=\s?\n)', s)
    
    to_list(foo)
    # ['4x Apples.', '5x Bananas', '6x Oranges', '3x Pears']
    to_list(bar)
    # ['Ice cream', 'Rice', 'Flour', 'Cola']
    Ответ написан
    1 комментарий
  • Почему sqlite3 выводит r[]?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    sql.execute('SELECT id FROM name WHERE call_data  = (?)', (ii[1],))
    
    sql.execute('INSERT INTO name VALUES (?, ?)', (ii[0], ii[1]))
    
    sql.execute('SELECT id FROM name WHERE call_data = (?)', (call.data,))
    Ответ написан
  • Как заменить символ в python?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    replace
    my_str = '142.185.15.15:22222'
    my_str = my_str.replace(':', '_')
    Ответ написан
    Комментировать
  • Python, beautifulsoup 4, альтернатива xpath?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Регулярным выражением:
    import re
    
    soup.find_all('a', href=re.compile(r'nearLocation'))

    Или select:
    soup.select('a[href*=nearLocation]')
    Ответ написан
    6 комментариев
  • Как асинхронно работать с sqlite3?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Никак. SQLite - это просто обычный файл, запись в который происходит с синтаксисом SQL.
    Ответ написан
    Комментировать
  • Почему меня не приглашают на собеседование?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    А ты настойчивый. Все, что додумался сделать - это перевести резюме на русский язык? На да ладно, давай по пунктам разберем твои "навыки":
    1. Git: нигде нет описания, README файлов, в большинстве случаев проекты просто залиты в git, как будто это хостинг, много где есть виртуальные окружения (лол).
    2. Django: куча копипасты и пустых проектов. Своего кода ноль.
    3. Flask: прочитай хотя бы про application factories, все в одном файле мешать - это позор в 2020 году даже для трейни.
    4. HTML/CSS/Bootstrap: где это все? Или по-твоему, если ты стили подключил и парочку форм на html сварганил - всё, этого достаточно, что бы упоминать это в навыках?
    5. PosgreSQL: аналогично предыдущему. Молодец, порастыкивал кучу many-to-one связей по всем моделям, уважаю, но это не повод, что бы писать PostgreSQL в навыках.
    6. Зашел на первый сайт из "опыта работы", debug режим включен. Понимаю. Тебе еще в прошлом вопросе об этом говорили, но ты решил проигнорировать это.
    А теперь посмотрим с позиции HR, которой часто не проверяет твои навыки, а просто подбирает резюме, так вот он увидит:
    1. Орфографические и пунктуационные ошибки. Серьезно, чел, ты резюме пишешь, неужели ворд не подсвечивает ошибки?
    2.
    Хочу разобраться как устроенны веб приложения от и до, писать чистый код и покрывать его тестами

    Так разберись. У тебя резюме на позицию "джуна", ты и так должен знать как писать чистый код и покрывать его тестами.
    3.
    читаю классику и научпоп (Д. Дойч, Р. Докинз, Д. Хофштадтер)

    Че, прям только их и читаешь?

    Как итог: фактически твой максимум - трейни, но тебя никто не рассматривает, так как у тебя все твое резюме состоит из вранья: в большинстве случае ты не умеешь то, что заявляешь в навыках. Более того, ты с самого начала пишешь "Junior Python developer", при этом не проработав ни дня. Ага, самопровозглашенный джун, круто.
    Давай, ждем третьего такого же вопроса, один фиг до тебя не доходит.
    Ответ написан
    2 комментария
  • Как организовать логгирование в python приложении?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Ошибки выкидывай в sentry, остальное зависит сугубо от твоего желания и удобства. Я никогда особо не заморачивался с логами, для некоторых сервисов нужно было писать ход выполнения, использовал коробочный logging или loguru, запись в файл, в случае с docker можно монтировать в отдельный каталог.
    Ответ написан
    1 комментарий
  • Selenium в ubuntu как правильно переносить строки?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Как то странно это выглядит, у тебя какое то время Shift + Enter зажаты, возможно со стороны Linux это как-то не так обрабатывается. Попробуй одним действием переводить строку:

    import time
    
    msg1 = f"Привет, {name}!" #Первая строка сообщения
    msg2 = f"Твой номер #{numb}." #Вторая строка
    
    msg_box = driver.find_element_by_xpath("//*[@id='main']/footer/div[1]/div[2]/div/div[2]")
    msg_box.click()
    for s in (msg1, msg2):
        for c in s:
            msg_box.send_keys(s)
            time.sleep(0.2)
        ActionChains(driver).key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.SHIFT).key_up(Keys.ENTER).perform()
    ActionChains(driver).send_keys(Keys.RETURN).perform()
    Ответ написан
    2 комментария
  • Как исправить поиск файла?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    1.
    In [1]: list(range(12))
    Out[1]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

    2. На счет 1 и 2 - должны быть какие то ошибки, показывай их.
    Ответ написан
    3 комментария
  • Как использовать тип переменной key в питоне?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Практически в любой книге input фигурирует чуть ли не с первой главы. Ты python методом тыка учишь, или что?

    UPD.
    import msvcrt
    
    inp_key = msvcrt.getch().decode()

    P.S. Это для Windows. Для Linux разбирайся с curses
    Ответ написан
    9 комментариев
  • Как попасть на интервью или как найти работу Python junior/intern разработчиком?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    1. Если устраиваешься на работу в русско-язычную компанию, то и резюме должно быть на русском.
    2. Ты устраиваешься на работу программистом, а не деплоером приложений на хероку. Это хорошо, что твои приложения где то запущены, но работодателей интересует твой код, его и показывай.
    I like people, not only books. In my childhood I figured out that I should think about how
    other people feel, this led to desire to be a psychologist but after playing with computers I
    discovered that programming can solve so much more.

    Чет вообще в голос. Без обид, паста крутая. Какое она отношение имеет к твоим профессиональным качествам?
    3. Это хорошо, что ты перечислил книжечки, которые ты прочитал, но они должны быть ни как не в пункте твоих знаний.

    Из твоего резюме понятно только то, что ты умеешь чета там на хероку заливать, прочитал несколько книг и философствуешь на уровне пьяного одноклассника. Из 160 заявок 2 отклика с таким резюме - предел мечтаний. Посмотри в интернете примеры резюме, их куча.

    P.S. Зашел в git... Убери "Junior Python developer" и как минимум "Git" и "Flask" из навыков. Видно, что ты даже документацию Flask не осилил, вероятнее всего и с Django такая же ситуация.
    P.S.2. Если ты по гайдам с sqlalchemy разобрался - это не означает, что есть смысл пихать PostgreSQL в список навыков.
    Ответ написан
    Комментировать
  • Как можно проверить, папка ли это?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Ответ написан
    Комментировать
  • Хочет ли кинуть заказчик на upwork в такой ситуации?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Требуй резервирования полной суммы. Та сумма, которая зарезервирована практически всегда подлежит выплате работнику, если работа выполнена в соответствии ТЗ, все остальное - просто на словах.
    Хочет он, или нет - я не экстрасенс, но передавать работу до того, как будет зарезервирована вся сумма я бы не стал.
    Ответ написан
    Комментировать
  • Зачем нужны сеттеры в Python?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    а тут, ты меняешь значение, даже так

    Да, меняешь, если есть сеттер. Удали его и получишь AttributeError.
    Ответ написан
    Комментировать