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

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

 -Сообщества

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

 -Статистика

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

Выбрана рубрика кодинг.


Другие рубрики в этом дневнике: ссылки и цитаты(73), софт(121), Питончик(1), ИМХО(44), железо(18), Для души(41), дистрибутивы(57), голова вава(21), Бу-га-га!(71), Безопасность(9), windoze must die(53), sos(1), howto(35)

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

Дневник

Суббота, 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 Января 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 на уровне юзера.

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

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

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

Метки:  

Мой скрипт для подсчёта контрольных сумм md5 (v0.20)

Дневник

Суббота, 20 Марта 2010 г. 01:51 + в цитатник
Составил вторую версию скрипта для подсчёта md5 из Nautilus. Ложится он опять же в каталог ~/.gnome2/nautilus-scripts/ . При выделении файла, например file.txt создаётся file.txt.md5 с хэшем. При выделении нескольких файлов создаётся md5sum.md5 и вывод пишется в него. При выделении каталога, например my_catalog, создаётся my_catalog.md5 и в него вписываются контрольные суммы всех файлов из my_catalog. При выделении нескольких файлов+каталогов создаёт md5sum.md5 и в него вписывает проверочные суммы файлов и содержимого выделенных каталогов. Типа того. С пробелами в именах/путях вроде бы работает хорошо. Но если кому приспичит попользоваться, за последствия не отвечаю))). Впрочем, буду пользоваться сам, ибо уверен, беды оно не натворит))). Да, если вызвать скрипт по контекстному меню на пустом месте каталога, то будет создан md5sum.md5.error , с текстом Не передано ни одного аргумента.

Вот, собственно, сам код, а во вложении готовый скрипт.

#!/bin/bash
#	Скрипт для посчёта контрольных сумм 0.20 (Воскресенье, 21 Март 2010)
#	© Линник Сергей wahnbild@yandex.ru
#	Лицензия GNU GPL v2 
#	http://www.gnu.org/licenses/gpl-2.0.txt
if [ $# -eq 0 ]
  then
	echo "Не передано ни одного аргумента" >> md5sum.md5.error
	exit 0;
fi
if [ $# -eq 1 ]
  then
	if [ -d "$1" ]
	then
		md5sum "$1"/* >> "$1".md5
	else
		md5sum "$1" >> "$1".md5
	fi
  else
	until [ -z "$1" ]
	do
		if [ -d "$1" ]
		then
			md5sum "$1"/* >> md5sum.md5
		else
			md5sum "$1" >> md5sum.md5
	fi
    shift
done
fi
exit 0;


ЗЫ. При выделении каталогов (лично у меня) вложенные в них каталоги игнорируются. Я об этом не подумал сначала... Испугался, что подобные ситуации будут вызывать ошибку. Но у меня всё работает, проверил. Для вложенных файлов создаются md5 суммы, а наличие вложенных каталогов просто игнорируется))). Хотя, надо на всякий случай позже эту оплошность исправить, а-то всякое бывает...
Рубрики:  софт
кодинг

Мой скрипт для жёстких ссылок версия 0.21

Дневник

Воскресенье, 28 Февраля 2010 г. 17:18 + в цитатник
Версия 0.20 оказалась с проблемкой, потому не позорюсь и не выкладываю. Он не работал с файлами, в имени/пути которых есть пробел или какой-либо ещё хитрый символ наподобие кавычек))). Да, и теперь я ему название придумал: scriptus-idiotus
. Хотя, если честно, удобная вещь))).

Итак, scriptus-idiotus 0.21:

#!/bin/bash
# scriptus-idiotus 0.21
# Скрипт создания жёстких ссылок (Суббота, 13 Февраль 2010).
# © Линник Сергей wahnbild@yandex.ru
# Лицензия GNU GPL v2
# http://www.gnu.org/licenses/gpl-2.0.txt
#
# Script using instructions http://www.liveinternet.ru/users/linux_loader/post119297532/
# Инструкции по применению скрипта http://www.liveinternet.ru/users/linux_loader/post119297532/
until [ -z "$1" ] # До тех пор пока не будут разобраны все входные аргументы...
do
numb=0;
while [ $numb -lt 1000 ];
do
numb=$(( $numb + 1 ));
filename="$1($numb)";
if [ ! -e "$filename" ]
then
cp -rl "$1" "$filename"
numb=1001;
fi
done
shift
done


Куда его пихать было тут http://www.liveinternet.ru/users/linux_loader/post119297532/ . Краткий changelog.

1. Теперь можно создавать ссылки на несколько объектов сразу, выделив их в окне наутилуса.
2. Теперь ссылки создаются не в папке, а рядом с исходным файлом, имя меняется по такому правилу:
file-name --> file-name(1)
Если применить скрипт повторно, то будут созданы file-name(1), file-name(2), file-name(3), file-name(4)... Максимальное значение - 1000. После него скрипт не будет ничего делать (мало ли, вдруг что-то заклинит и будет миллион ссылок в папке на один файл, кому оно надо, такое счастье?).

Можно сделать новый и старый скрипт одновременно и пользоваться любым под настроение :D.

Проблемы: коверкается расширение файлов. То есть ссылка на файл kino.avi получает имя kino.avi(1) . Хотя, обычно это не принципиально важно в Линукс, а на FAT или NTFS ссылки всё равно не создаются :). А кроме того всегда можно переименовать результат. Версия 0.22 будет иметь конечные имена в формате мягких ссылок Наутилуса: file-name --> Ссылка на file-name . Хотя, мне пока что такой подход тоже не нравится, так как результат будет в окне программы далеко от исходника... Не очень-то удобное решение...

Готовый скрипт есть во вложении типа. Пусть будет на всякий :).
Рубрики:  софт
кодинг

Метки:  

Жёсткие ссылки, продолжение

Дневник

Воскресенье, 24 Января 2010 г. 18:18 + в цитатник
Итак, я пошёл дальше и упростил создание жёстких ссылок. Пока можно создавать моим способом только на один файл, ибо с программированием я пока что не сильно дружу... На что гаразд, то и сваял))). Как создавать жёсткие ссылки в Наутилусе.

В каталоге ~/.gnome2/nautilus-scripts/ создаём исполняемый текстовый файл. То бишь, в правах доступа к файлу должно быть разрешено выполнение. Это ясно. Я на всякий случай сказал. В сам файл пишем следующее:

#!/bin/bash
sdate=`date +%Y-%m-%d\ %H-%M-%S`;
mkdir "links $sdate";
cp -rl "$*" "links $sdate"/;

Можно назвать скрипт "Создать жёсткую ссылку", без расширения. Тогда в контекстном меню файлов и каталогов Наутилуса появится пункт:
 (498x341, 5Kb)

В результате, в текущем каталоге будет создан каталог с именем "links текущие_год-месяц-день часы-минуты-секунды" и в нём жёсткие ссылки. Такое имя я задал для уникальности имени нового каталога. Ясень пень, на директории жёские ссылки созданы не будут. Будут просто созданы новые директории с такими же именами.

Недостатки.

  1. Работает только в Наутилусе. Но уверен, что можно прикрутить к любой другой оболочке. Например, ассоциировать каталоги у себя с этим скриптом. Уже пол проблемы решено будет))). В Конквероре наверное тоже скрипты есть.

  2. Создаёт за один раз ссылку только на один файл/каталог. Если выделить несколько, то ничего не выйдет. Если надо сделать ссылки на много файлов, то целесообразно создать новый каталог, например temp и временно переместить эти файлы в него. Открыть каталог temp скриптом, а потом вернуть оригиналы файлов наместо))).

Да, ещё. Чтобы легко создавать файлы скриптов, сделайте шаблон например такой:

#!/bin/bash


с именем например new.sh, поместите его в папку ~/Шаблоны или что там у вас записано в ~/.config/user-dirs.dirs . Сделайте его исполняемым по желанию. после этого можно создавать новые пустые скрипты в Наутилусе из этого шаблона, просто контекстным меню, так же, как создаются каталоги.

P.S. Код сценария распространяется на условиях лицензии GPL v2 . Если вы об него сломаете свои файлы, я не виноватый . Гарантированное количество глюков в скрипте 3глюка/символ
Рубрики:  софт
howto
кодинг

Метки:  

 Страницы: [1]