-Поиск по дневнику

Поиск сообщений в Linux_Loader

 -Сообщества

Участник сообществ (Всего в списке: 4) Elfen_Lied Linux_Comunity Planet_Of_WASP The_Ring

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 20.04.2008
Записей: 743
Комментариев: 2542
Написано: 7716




"Теория и практика иногда сталкиваются. Когда это случается, теория проигрывает. Всегда."

© Linus Torvalds.


Забавный способ распаковки

Суббота, 18 Марта 2023 г. 21:21 + в цитатник

Оказывается, в пайтон есть способ беспонтовой распаковки сложных, но закономерных итерабельных объектов.

 
l = [(1, 2, 3), (4, 5, 6), (7, 8, 9), (4, 0, 1)]
 
for (a, b ,c) in l:
    print(f"{a}, {b}, {c}")
 
Получаем вывод:
 
1, 2, 3
4, 5, 6
7, 8, 9
4, 0, 1
Рубрики:  кодинг
Питончик

module 'collections' has no attribute 'MutableMapping'

Среда, 27 Апреля 2022 г. 15:17 + в цитатник

Кстате, третья джанга не работает с питоном 3.10. Сегодня пробовал установить, получил AttributeError: module 'collections' has no attribute 'MutableMapping'.

Выход: или юзать питон 3.9 + джанга 3.2 или 3.10 + 4.0. 

Рубрики:  howto
кодинг

Метки:  

Без заголовка

Воскресенье, 08 Августа 2021 г. 22:10 + в цитатник

2504006_20210807_222731 (700x525, 258Kb)

Хлеб not found.


jupyter notebook

Среда, 02 Июня 2021 г. 19:56 + в цитатник

 

Так, на всякий случай заметочка для себя. Чтобы установить в Линукс  jupyter notebook, набираем одну единственную команду:

$ pip3 install notebook


Как организовать цикл for i in range(...) в шаблоне Django

Вторник, 11 Мая 2021 г. 22:47 + в цитатник

 

Сегодня столкнулся с такой необходимостью. Чтобы сделать пагинатор, решил замутить цикл в шаблоне Django в духе:

{% for num in range(1, count_of_pages + 1) %}

    <a href="/page{{num}}">{{num}}</a>

{% endfor %}

Работать такой код не будет))). Код Python содержащий функции обычно не работает. Но можно очень просто выкрутиться. Из контекста текущего вьюза в месте с остальными переменными шаблону можно передать что-то типа { ..., 'my_range': range(1, count_of_pages + 1)}. Теперь в шаблоне доступна переменная my_range. А дальше с ней можно делать то же, что со списками, итераторами и т.п.:

{% for num in my_range %}

    <a href="/page{{num}}">{{num}}</a>

{% endfor %}

 

 


Как добавить новое поле типа DateTimeField в Django

Понедельник, 10 Мая 2021 г. 14:19 + в цитатник

Ситуация: нужно добавить в модель Django два новых поля с датой и временем - created и last_modified. При чём дата создания (created) должна быть заполнена обязательно по логике здравого смысла, а дату модификации мы хотим изначально оставить пустой, чтобы, например, для новых страниц (записей, заметок, комментариев, чего угодно) выводилось примерно следующее:

Создано:  10.05.2021  в 13:40:28

Отредактировано: Никогда

Есть две проблемы. Первая. У нас на сайте уже есть страницы, при добавлении поля created оно окажется изначально пустым и мы получим ошибку. То есть старым записям нужно назначить некоторую дату. Единственный вариант, который я нашёл, сделать такое поле:

created = models.DateTimeField('Date of creation', default=timezone.now)

default=timezone.now обязательно без скобок. Если указать default=timezone.now(), полю будет назначена дата запуска сервера, и у всех новых страниц дата создания (как и время) будут одинаковыми. Если скобки не указать, метод будет вызываться при записи каждой новой строки в таблицу БД и вычислять текущее время.

А вот с полем last_modified другая проблема. Дата в него изначально не записывается, и мы получим ту же ошибку:

django.db.utils.IntegrityError: column "last_modified" contains null values

Есть два простых выхода:

last_modified = models.DateTimeField('Last modified', default=None, null=True, blank=True)

База данных позволит хранить пустые значения. Возможно, этот код будет работать без null=True, я не пробовал. Но без blank=True точно будут проблемы. 

Второй выход - всё же назначить дату по умолчанию как timezone.now, а при выводе на страницу проверять: если дата модификации совпадает с датой создания, выводить Отредактировано: Никогда.

P.S. подозреваю, что default=None во втором примере кода тоже ненужен)).


Как проверить целостность скачанного Пайтоном файла

Суббота, 01 Мая 2021 г. 21:16 + в цитатник

Если качать файлы с помощью Python через хреновое соединение, например - бесплатный VPN, иногда они оказываются недокачаными. 

Сравниваем реальный размер с тем, который должен быть получен:

# качаем файл
response = requests.get('адрес_файла_в_сети')
 
# узнаём требуемый размер
declared_file_size = int(response.headers["Content-Length"])
 
# проверяем, сколько скачано по факту
real_file_size = len(response.content)
 
# если всё правильно, записываем файл на диск
if declared_file_size == real_file_size:
    with open('имя_файла_на_диске', 'wb') as f:
        f.write(response.content)
else:
    чего_вы_там_хотите_сделать_ещё))
    
Ну, во всяком случае, у меня с mp3-файлами канает.

Ключевое слово else в Python

Понедельник, 19 Апреля 2021 г. 18:32 + в цитатник

Ключевое слово else в Python используется как минимум в трёх конструкциях.

В конструкции if ... elif ... else. Тут всё понятно. Если не выполнено ни одно из вышеперечисленных условий, выполняется блок else.

В конструкции try ... except. После try ... except и, возможно, finally можно так же прописать блок else, который выполнится, только если в try не было поймано никакого исключения.

И наконец - в конструкции while. После блока while можно вписать else, который выполнится только если цикл "умер" своей смертью. А если он прерван ключевым словом break, тогда else не выполнится, так как он является частью цикла, а он окончательно прерван.

count = 0

while count < 10:

    print(count)

    count += 1

    if count == 5:

        break

else:

    print('Цикл завершён')

Последняя строка не будет выполнена, так как цикл оборвётся, когда счётчик станет равным 5.


Как перевести римские цифры в арабские в Python

Понедельник, 19 Апреля 2021 г. 17:30 + в цитатник

 

 

Ставим модуль roman

$ pip3 install roman

Далее пользуемся методом fromRoman()

Например так:

import roman

print(roman.fromRoman("XVII"))

 


Простой способ вывести на экран список в python

Воскресенье, 18 Апреля 2021 г. 14:44 + в цитатник

Оказывается, есть простой способ вывести на экран список в Python без всяких циклов и прочего. То есть вместо:

for item in lst:

    print(item)

есть сокращённая запись:

print(*lst)

Во кино).

Таким же образом можно вывести множество, кортеж и ключи словаря.


Оператор not в Python

Суббота, 10 Апреля 2021 г. 18:51 + в цитатник

 

Оператор not в Python на первый взгляд иногда ведёт себя нелогично. Например,

print([] == False)  # выведет False, но:

if not False:

    print('not False')   # выведет not False

if not []:

    print('not []')  # выведет not []

То есть пустой список ведёт себя точно так же, как и False, при этом не равняясь ему.

Дело, оказывается, вот в чём. not возвращает True, если ему передано булево значение False, или любое другое, имеющее длину == 0, или же сам 0 (неважно в каком виде: int, float или complex). То есть "пустые" или нулевые значения в конструкции if not ... будут вести себя как False. Может быть удобно для проверки, было ли в ходе выполнения программы, например, в список или словарь добавлено какое-то значение, или нет.


Определить, делится ли число в двоичном формате на 3 в Python

Воскресенье, 04 Апреля 2021 г. 15:40 + в цитатник
import re

pattern = r"(1(01*0)*1|0)*"
nums = ['0', '10010', '00101', '01001', 'Not a number', '1 1', '0 0', '10', '1000']

for num in nums:
    if re.fullmatch(pattern, num) is not None:
        print("Число:", num)


$a = true ? 0 : true ? 1 : 2;

Вторник, 23 Февраля 2021 г. 21:06 + в цитатник

 

 

Читал только что о левоассоциативных и правоассоциативных операторах в PHP. Понравился пример)))))).

$a = true ? 0 : true ? 1 : 2;

Возвращает 2. Сначала завис. Потом дошло.

Вычисляется слева направо.   

true ? 0 : true вернуло 0.

0 ? 1 : 2 вернуло 2.

$a = 2.



Без заголовка

Пятница, 29 Января 2021 г. 23:37 + в цитатник

 

 

 

Давно тут не был))).

Мало,я думаю, кому интересно, но всё же. Сижу до сих пор в Linux Mint (и доволен). Изучаю web-разработку. Два года. Но времени катастрофически не хватает, потому движется всё очень медленно.

Причина: решил податься в вэб-девелоперы). У нас в городе аж три фирмы, занимающихся этим делом. Одна на WP, одна на Django, одна на Drupal и TYPO3 (хотя недавно добавили в арсенал WP/bedrock). Вот они-то меня грозились взять на работу, если подтяну то и это. Подтянул. Но во время карантина, как известно, с вакансиями сильно не разгонишься.

Чё научился. Два года назад знал html4, немного css и имел представление о JS и PHP. Сейчас юзаю HTML5 очень хорошо, css неплохо, JS на уровне "написать анимированную менюшку, скрыть блок, создать блок, сделать таймер и т.п.", на PHP есть пару самостоятельных проектов. Маленький и очень маленький). Юзаю git, GitHub, Packagist, Composer, немного twig. MySQL на уровне "создать таблицу, записать, удалить, изменить, выбрать строку". Немного регулярные выражения. Немного темизацию в Друпал освоил. Начинаю изучать создание модулей для Друпал.

Из последних впечатлений. Всегда юзал Kate в качестве редактора кода. На днях попробовал Sublime Text. В общем я в оргазме восторге. Kate фтопку. Хотя Sublime Text установлен был давно, но раньше я его не понимал.

Начал я изучение веб-разработки с JS. Он безумно мне понравился просто со старту. Но потом настала пора учить ненавистный PHP. Он бесил меня всегда. И вот чудо. Теперь PHP представляется мне стройным, а JS корявым сучком).

Короче, вот такие вот дела.




Без заголовка

Суббота, 05 Января 2019 г. 11:56 + в цитатник
Замыкания это что-то интересное.


Понравилось: 42 пользователям

Программа

Вторник, 09 Января 2018 г. 01:50 + в цитатник

Вот такое понаписал. Добавить нечего, кроме Qt-морды. Но это потом, когда комп будет.

#-*-coding:utf8;-*-
# ver. 2.31
# Программа рассчитывает скорость или время свободного падения из пользовательского ввода. Автоматически корректирует введенные данные. Например убирает лишние точки, заменяет запятые точками. Если ввод содержит некорректные символы (буквы и пунктуацию), выдаёт ошибку и предлагает повторить ввод.

# Как  и все мои программы работает ТОЛЬКО в оффлайне, потому что содержит  символы кириллицей.

import math

def finput ():
    g = 9.8
    a = input("Введите высоту падения в метрах \nили Enter, если хотите вычислить \nскорость по времени: \n> ")
    a = zap2point(a)
    if len(a) > 0:
        h = number_test(a)
        if h == "error":
            finput  ()
        else:
            h = float (h)
            u = math.sqrt(2*g*h)
            t = u / g
            u2 = u * 3.6
            print ("Конечная скорость падения: \n{} м/с \n{} км/ч \n{} м за {} сек.".format (fr(u), fr(u2), fr(h), fr(t)))
    else:
        a = input("Введите время падения в секундах: \n> ")
        a = zap2point(a)
        t = number_test(a)
        if t == "error":
            finput ()
        else:
            t = float (t)
            u = g * t
            h = (u * t) / 2
            u2 = u * 3.6
            print ("Конечная скорость падения: \n{} м/с \n{} км/ч \n{} м за {} сек.".format (fr(u), fr(u2), fr(h), fr(t)))

def number_test (a):
    b = ""
    # Если  число точек в строке больше 1
    # запоминаем  индекс первой точки.
    if a.count (".") > 1:
        pindex = a.index(".")
    else:
        pindex = len (a) + 2
    if len(a) == 0:
        b = "error"
        return b
    else:
    # Перебираем  все символы строки
    # Если символ число или точка, продолжаем
    # Если символ точка  и  его индекс  больше
    # индекса первой точки, пропускаем его
    # Если символ не число и не точка -
    # обрываем цикл
        for char in  a:
            if char in ("1234567890."):
                if char == "." and len (b) > pindex:
                    continue
                b += char
            else:
                print ("***********************\nОшибка! Введите целое или \nвещественное число, \nнапример 34 или 45.6\n***********************")
                b = "error"
                break
    if b == ".":
        print ("***********************\nОшибка! Введите целое или \nвещественное число, \nнапример 34 или 45.6\n***********************")
        b = "error"
    return b

# Так как питон иногда отображает
# натуральные числа некрасиво, например
# 3.2999999999 вместо 3.3, я написал
# функцию,которая более и менее корректно
# окугляет число перед выводом на экран.

def fr (x):
    if x >= 10000:
        x = int(math.modf(x)[1])
    elif x >= 999:
        x = "{:.5}".format(x)
    elif  x <= 0.0001:
        x = "{:.10}".format(x)
    elif x >= 99.9:
        x = "{:.4}".format(x)
    else:
        x = "{:.3}".format(x)
    return x

# Так как часто  при вводе числа хочется
# вместо точки поставить запятую, эта
# функция заменяет все запятые точками
# и удаляет пробелы
# чтобы избежать ошибок при вычислении

def zap2point (h):
    y = ""
    for char in h:
        if char == ",":
            char = "."
        elif char == " ":
            continue
        y += char
    return y
   
# собственно, запускаем программу
finput()

Рубрики:  кодинг

Без заголовка

Среда, 03 Января 2018 г. 23:46 + в цитатник

Я тут решил встряхнуть стариной и занялся питоноводством. Вроде бы никогда серьезно прямо не занимался программированием. Но вроде и база есть. HTML,  CSS, чуток JavaScript, а ещё в училище Basic 2.0, а ещё азы Pascal, PHP и конечно же почти 10 лет bash на уровне юзера.

Написал даже одну консольную программу. Не ахти полезную, но умную. Точнее программ несколько, но одну самую мудрую. Считает скорость и время свободного падения тела, если задана высота, или высоту и скорость, если задано время падения. Умеет анализировать пользовательский ввод, удалять лишние точки, если юзерь поставил их по запаре или от нефиг делать. Умеет удалять пробелы и заменять запятые точками.

Правда с графическим интерфейсом пока что не работал. И программить могу только на телефоне. Компа нет. Всё равно забавно. 

Рубрики:  кодинг

Метки:  

Cinnamon))

Среда, 13 Сентября 2017 г. 23:07 + в цитатник

2504006_ (700x560, 594Kb)


Cinnamon

Вторник, 12 Сентября 2017 г. 19:38 + в цитатник
Давно не ковырял ничего нового. Времени нет совсем даже пользоваться компьютером, не то, что ковырять. И вот, настал момент, когда у меня относительно свободный вечер. При этом мой старый Минт 16 КДЕ безнадёжно устарел, хоть ещё и полностью живой и здоровый. Минт 18.* КДЕ глючит. Решил посмотреть Cinnamon. Позже, возможно, гляну XFCE и mate. Я их когда-то видел, но подозреваю, что с тех пор они стали чуть более юзабельны.

Без заголовка

Вторник, 30 Мая 2017 г. 22:39 + в цитатник
Plasma 5.9 уже куда более приятна, чем 5.8 и тем более, чем 5.7, но ещё не совсем готова для нормального использования...

Во-первых, оно стало работать быстрее. Прежние версии тупили нещадно. Эта же не уступает в скорости кде4. Ещё остались глюки оконного менеджера при использовании сторонних тем. Очень не нравится новый дольфин, раньше был лучше. Остальные глюки ещё не проверял, пофиксили, или осталось ещё.

Но, в целом, оно уже приятное. Если бы не пару ложек дёгтя... Мне кажется, что через годик оно станет вменяемым.


Поиск сообщений в Linux_Loader
Страницы: [37] 36 35 ..
.. 1 Календарь