Задать вопрос
  • Как разобраться с кодировкой в python?

    @abcd0x00
    Не надо его просматривать через repr() - то есть просто выводить словарь. Надо выводить сами строки, тогда они будут выглядеть нормально.
    Пример
    >>> d = {1: u'\n25 \u0434\u0435\u043a\n\u0412\u0441\n\u0440\u0443\u0431.26,518\n',
    ...      2: u'\n26 \u0434\u0435\u043a\n\u041f\u043d\n\u0440\u0443\u0431.26,518\n',
    ...      3: u'\n27 \u0434\u0435\u043a\n\u0412\u0442\n\u0440\u0443\u0431.26,518\n',
    ...      4: u'\n28 \u0434\u0435\u043a\n\u0421\u0440\n\u0440\u0443\u0431.26,518\n',
    ...      5: u'\n29 \u0434\u0435\u043a\n\u0427\u0442\n\u0440\u0443\u0431.116,612\n',
    ...      6: u'\n30 \u0434\u0435\u043a\n\u041f\u0442\n\u0440\u0443\u0431.118,116\n',
    ...      7: u'\n31 \u0434\u0435\u043a\n\u0421\u0431\n - \n',
    ...      8: u'\n01 \u044f\u043d\u0432\n\u0412\u0441\n\u0440\u0443\u0431.16,980\n',
    ...      9: u'\n02 \u044f\u043d\u0432\n\u041f\u043d\n\u0440\u0443\u0431.118,115\n',
    ...      10: u'\n03 \u044f\u043d\u0432\n\u0412\u0442\n\u0440\u0443\u0431.16,975\n',
    ...      11: u'\n04 \u044f\u043d\u0432\n\u0421\u0440\n\u0440\u0443\u0431.37,928\n',
    ...      12: u'\n05 \u044f\u043d\u0432\n\u0427\u0442\n\u0440\u0443\u0431.16,978\n',
    ...      13: u'\n06 \u044f\u043d\u0432\n\u041f\u0442\n\u0440\u0443\u0431.51,238\n',
    ...      14: u'\n07 \u044f\u043d\u0432\n\u0421\u0431\n\u0440\u0443\u0431.18,898\n',
    ...      15: u'',
    ...      16: u'',
    ...      17: (u'\u0417\u043d\u0430\u0447\u043e\u043a \u043e\u0437\u043d\u0430\u0447'
    ...           u'\u0430\u0435\u0442 \u043a\u043e\u0434-\u0448\u0435\u0440 \u0440\u0435'
    ...           u'\u0439\u0441.'),
    ...      18: (u'\u0421\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0439 \u0446\u0435'
    ...           u'\u043d\u0442\u0440')}
    >>> 
    >>> for k in d:
    ...     print k, '->', d[k]
    ... 
    1 -> 
    25 дек
    Вс
    руб.26,518
    
    2 -> 
    26 дек
    Пн
    руб.26,518
    
    3 -> 
    27 дек
    Вт
    руб.26,518
    
    4 -> 
    28 дек
    Ср
    руб.26,518
    
    5 -> 
    29 дек
    Чт
    руб.116,612
    
    6 -> 
    30 дек
    Пт
    руб.118,116
    
    7 -> 
    31 дек
    Сб
     - 
    
    8 -> 
    01 янв
    Вс
    руб.16,980
    
    9 -> 
    02 янв
    Пн
    руб.118,115
    
    10 -> 
    03 янв
    Вт
    руб.16,975
    
    11 -> 
    04 янв
    Ср
    руб.37,928
    
    12 -> 
    05 янв
    Чт
    руб.16,978
    
    13 -> 
    06 янв
    Пт
    руб.51,238
    
    14 -> 
    07 янв
    Сб
    руб.18,898
    
    15 -> 
    16 -> 
    17 -> Значок означает код-шер рейс.
    18 -> Сервисный центр
    >>>

    Ответ написан
    Комментировать
  • В чем разница между & и &&?

    @abcd0x00
    Операции && || ! :
    используются для проверки истинности своих операндов.

    Операции & | ^ ~ << >> :
    используются для управления битами в своих операндах.

    Если у тебя есть переменные flag1, flag2, flag3, ты можешь проверить их на истинность:
    if ((flag1 && flag2) || !flag3) {
        something;
    }

    А если у тебя есть переменная states, ты можешь проверить в ней какие-то определённые биты:
    if (states & (0x1 | 0x4)) {
        something;
    }

    0x1 - в битовом представлении выглядит как
    00000000 00000000 00000000 00000001

    0x4 - в битовом представлении выглядит как
    00000000 00000000 00000000 00000100

    0x1 | 0x4 - в битовом представлении выглядит как
    00000000 00000000 00000000 00000101

    Пример1:
    Если states равно 0x123 - в битовом представлении это выглядит как
    00000000 00000000 00000001 00100011

    Выражение states & (0x1 | 0x4) - в битовом представлении будет выглядеть как
    00000000 00000000 00000001 00100011 &
    00000000 00000000 00000000 00000101
    =
    00000000 00000000 00000000 00000001

    Получилось, что всё выражение равно 0x1 или просто 1.
    if (0x1) {
        something;
    }


    Пример2:
    Если states равно 0x122 - в битовом представлении это выглядит как
    00000000 00000000 00000001 00100010

    Выражение states & (0x1 | 0x4) - в битовом представлении будет выглядеть как
    00000000 00000000 00000001 00100010 &
    00000000 00000000 00000000 00000101
    =
    00000000 00000000 00000000 00000000

    Получилось, что всё выражение равно 0x0 или просто 0.
    if (0x0) {
        something;
    }
    Ответ написан
    Комментировать
  • 2 примера: генератор списка и yield - разницы не видно. Некорректные примеры?

    @abcd0x00
    Вот пример генератора через функцию
    >>> def g():
    ...     while True:
    ...         yield 'a'
    ...         yield 'b'
    ...         yield 'c'
    ... 
    >>> list(zip(g(), range(10)))
    [('a', 0), ('b', 1), ('c', 2), ('a', 3), ('b', 4), ('c', 5), ('a', 6), ('b', 7), ('c', 8), ('a', 9)]
    >>>

    Функция даёт больше возможностей для формирования более гибких генераторов.
    Ответ написан
    Комментировать
  • Регулярка: как преобразовать несколько стоящих рядом BR в одну?

    @abcd0x00
    >>> import re
    >>> 
    >>> s = 'abc<br><br><br><br>def<br><br><br><br>ghi'
    >>> re.sub(r'(<br>)+', '<br>', s)
    'abc<br>def<br>ghi'
    >>>
    Ответ написан
    Комментировать
  • Программа на С. Проблема с записью в файл многобайтного символа! компилятор GCC?

    @abcd0x00
    #include <stdio.h>
    #include <locale.h>
    #include <wchar.h>
    
    int main(void)
    {
        FILE *fp_in, *fp_out;
        wchar_t wch;
    
        setlocale(LC_ALL, "ru_RU.UTF-8");
    
        fp_in = fopen("file.txt", "r");
        wch = getwc(fp_in);
        fclose(fp_in);
    
        putwc(wch, stdout);
        wch++;
        putwc(wch, stdout);
        putwc(L'\n', stdout);
    
        fp_out = fopen("output.txt", "w");
        putwc(wch, fp_out);
        fclose(fp_out);
    
        return 0;
    }


    Вывод
    [guest@localhost wch]$ .ansi wch.c -o wch
    [guest@localhost wch]$ ./wch
    жз
    [guest@localhost wch]$ cat file.txt 
    ж[guest@localhost wch]$ cat output.txt 
    з[guest@localhost wch]$
    Ответ написан
  • Как написать монтирование диска на bash?

    @abcd0x00
    Просто всё проделываешь руками, а потом каждую команду заносишь в shell-скрипт.

    Монтировать принято в /mnt.
    Для новой точки принято создавать отдельный каталог.

    Для монтирования нужны права суперпользователя. Поэтому скрипт ты пишешь обычный, но запускаешь его потом через sudo.
    (И совсем не обязательно затрагивать /etc/fstab для этого.)
    Ответ написан
  • Почему веб сервер не хочет запускать сайт на python 3?

    @abcd0x00
    Права ты забыл выставить и шебанг.

    script.py
    #!/usr/bin/env python3
    
    print('Content-type: text/html; charset=utf-8')
    print()
    print('<h1>Hello world!</h1>')
    
    a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    b = {20, 3, 4, 23, 11, 17, 55, 8}
    
    print('<p>A =', a)
    print('<p>B =', b)
    print('<p>Объединение Множеств A и B =', a | b)


    [guest@localhost serv]$ ll
    итого 4
    drwxrwxr-x. 2 guest guest 4096 авг 11 11:43 cgi-bin
    [guest@localhost serv]$ ll cgi-bin/
    итого 4
    -rwxrwxr-x. 1 guest guest 289 авг 11 11:43 script.py
    [guest@localhost serv]$


    [guest@localhost serv]$ python3 -m http.server --cgi
    Serving HTTP on 0.0.0.0 port 8000 ...
    127.0.0.1 - - [11/Aug/2016 11:45:30] "GET /cgi-bin/script.py HTTP/1.1" 200 -
    Ответ написан
    Комментировать
  • Как вывести все существующие символы?

    @abcd0x00
    мне логика нужна, все равно на чем писать.

    На питоне можешь
    Код
    >>> for i in range(256):
    ...     print('{:03d} 0x{:02x} {!r}'.format(i, i, chr(i)))
    ... 
    000 0x00 '\x00'
    001 0x01 '\x01'
    002 0x02 '\x02'
    003 0x03 '\x03'
    004 0x04 '\x04'
    005 0x05 '\x05'
    006 0x06 '\x06'
    007 0x07 '\x07'
    008 0x08 '\x08'
    009 0x09 '\t'
    010 0x0a '\n'
    011 0x0b '\x0b'
    012 0x0c '\x0c'
    013 0x0d '\r'
    014 0x0e '\x0e'
    015 0x0f '\x0f'
    016 0x10 '\x10'
    017 0x11 '\x11'
    018 0x12 '\x12'
    019 0x13 '\x13'
    020 0x14 '\x14'
    021 0x15 '\x15'
    022 0x16 '\x16'
    023 0x17 '\x17'
    024 0x18 '\x18'
    025 0x19 '\x19'
    026 0x1a '\x1a'
    027 0x1b '\x1b'
    028 0x1c '\x1c'
    029 0x1d '\x1d'
    030 0x1e '\x1e'
    031 0x1f '\x1f'
    032 0x20 ' '
    033 0x21 '!'
    034 0x22 '"'
    035 0x23 '#'
    036 0x24 '$'
    037 0x25 '%'
    038 0x26 '&'
    039 0x27 "'"
    040 0x28 '('
    041 0x29 ')'
    042 0x2a '*'
    043 0x2b '+'
    044 0x2c ','
    045 0x2d '-'
    046 0x2e '.'
    047 0x2f '/'
    048 0x30 '0'
    049 0x31 '1'
    050 0x32 '2'
    051 0x33 '3'
    052 0x34 '4'
    053 0x35 '5'
    054 0x36 '6'
    055 0x37 '7'
    056 0x38 '8'
    057 0x39 '9'
    058 0x3a ':'
    059 0x3b ';'
    060 0x3c '<'
    061 0x3d '='
    062 0x3e '>'
    063 0x3f '?'
    064 0x40 '@'
    065 0x41 'A'
    066 0x42 'B'
    067 0x43 'C'
    068 0x44 'D'
    069 0x45 'E'
    070 0x46 'F'
    071 0x47 'G'
    072 0x48 'H'
    073 0x49 'I'
    074 0x4a 'J'
    075 0x4b 'K'
    076 0x4c 'L'
    077 0x4d 'M'
    078 0x4e 'N'
    079 0x4f 'O'
    080 0x50 'P'
    081 0x51 'Q'
    082 0x52 'R'
    083 0x53 'S'
    084 0x54 'T'
    085 0x55 'U'
    086 0x56 'V'
    087 0x57 'W'
    088 0x58 'X'
    089 0x59 'Y'
    090 0x5a 'Z'
    091 0x5b '['
    092 0x5c '\\'
    093 0x5d ']'
    094 0x5e '^'
    095 0x5f '_'
    096 0x60 '`'
    097 0x61 'a'
    098 0x62 'b'
    099 0x63 'c'
    100 0x64 'd'
    101 0x65 'e'
    102 0x66 'f'
    103 0x67 'g'
    104 0x68 'h'
    105 0x69 'i'
    106 0x6a 'j'
    107 0x6b 'k'
    108 0x6c 'l'
    109 0x6d 'm'
    110 0x6e 'n'
    111 0x6f 'o'
    112 0x70 'p'
    113 0x71 'q'
    114 0x72 'r'
    115 0x73 's'
    116 0x74 't'
    117 0x75 'u'
    118 0x76 'v'
    119 0x77 'w'
    120 0x78 'x'
    121 0x79 'y'
    122 0x7a 'z'
    123 0x7b '{'
    124 0x7c '|'
    125 0x7d '}'
    126 0x7e '~'
    127 0x7f '\x7f'
    128 0x80 '\x80'
    129 0x81 '\x81'
    130 0x82 '\x82'
    131 0x83 '\x83'
    132 0x84 '\x84'
    133 0x85 '\x85'
    134 0x86 '\x86'
    135 0x87 '\x87'
    136 0x88 '\x88'
    137 0x89 '\x89'
    138 0x8a '\x8a'
    139 0x8b '\x8b'
    140 0x8c '\x8c'
    141 0x8d '\x8d'
    142 0x8e '\x8e'
    143 0x8f '\x8f'
    144 0x90 '\x90'
    145 0x91 '\x91'
    146 0x92 '\x92'
    147 0x93 '\x93'
    148 0x94 '\x94'
    149 0x95 '\x95'
    150 0x96 '\x96'
    151 0x97 '\x97'
    152 0x98 '\x98'
    153 0x99 '\x99'
    154 0x9a '\x9a'
    155 0x9b '\x9b'
    156 0x9c '\x9c'
    157 0x9d '\x9d'
    158 0x9e '\x9e'
    159 0x9f '\x9f'
    160 0xa0 '\xa0'
    161 0xa1 '¡'
    162 0xa2 '¢'
    163 0xa3 '£'
    164 0xa4 '¤'
    165 0xa5 '¥'
    166 0xa6 '¦'
    167 0xa7 '§'
    168 0xa8 '¨'
    169 0xa9 '©'
    170 0xaa 'ª'
    171 0xab '«'
    172 0xac '¬'
    173 0xad '\xad'
    174 0xae '®'
    175 0xaf '¯'
    176 0xb0 '°'
    177 0xb1 '±'
    178 0xb2 '²'
    179 0xb3 '³'
    180 0xb4 '´'
    181 0xb5 'µ'
    182 0xb6 '¶'
    183 0xb7 '·'
    184 0xb8 '¸'
    185 0xb9 '¹'
    186 0xba 'º'
    187 0xbb '»'
    188 0xbc '¼'
    189 0xbd '½'
    190 0xbe '¾'
    191 0xbf '¿'
    192 0xc0 'À'
    193 0xc1 'Á'
    194 0xc2 'Â'
    195 0xc3 'Ã'
    196 0xc4 'Ä'
    197 0xc5 'Å'
    198 0xc6 'Æ'
    199 0xc7 'Ç'
    200 0xc8 'È'
    201 0xc9 'É'
    202 0xca 'Ê'
    203 0xcb 'Ë'
    204 0xcc 'Ì'
    205 0xcd 'Í'
    206 0xce 'Î'
    207 0xcf 'Ï'
    208 0xd0 'Ð'
    209 0xd1 'Ñ'
    210 0xd2 'Ò'
    211 0xd3 'Ó'
    212 0xd4 'Ô'
    213 0xd5 'Õ'
    214 0xd6 'Ö'
    215 0xd7 '×'
    216 0xd8 'Ø'
    217 0xd9 'Ù'
    218 0xda 'Ú'
    219 0xdb 'Û'
    220 0xdc 'Ü'
    221 0xdd 'Ý'
    222 0xde 'Þ'
    223 0xdf 'ß'
    224 0xe0 'à'
    225 0xe1 'á'
    226 0xe2 'â'
    227 0xe3 'ã'
    228 0xe4 'ä'
    229 0xe5 'å'
    230 0xe6 'æ'
    231 0xe7 'ç'
    232 0xe8 'è'
    233 0xe9 'é'
    234 0xea 'ê'
    235 0xeb 'ë'
    236 0xec 'ì'
    237 0xed 'í'
    238 0xee 'î'
    239 0xef 'ï'
    240 0xf0 'ð'
    241 0xf1 'ñ'
    242 0xf2 'ò'
    243 0xf3 'ó'
    244 0xf4 'ô'
    245 0xf5 'õ'
    246 0xf6 'ö'
    247 0xf7 '÷'
    248 0xf8 'ø'
    249 0xf9 'ù'
    250 0xfa 'ú'
    251 0xfb 'û'
    252 0xfc 'ü'
    253 0xfd 'ý'
    254 0xfe 'þ'
    255 0xff 'ÿ'
    >>>

    Ответ написан
    Комментировать
  • Онлайн-задачник по ANSI C с проверкой заданий (на русском языке), есть ли такой?

    @abcd0x00
    Изучаю по самоучителю курс ANSI C

    Непонятно, что ты читаешь. Материалы бывают разные.

    Общая стратегия такая:
    1. Берёшь K&R2 (книга от создателя языка). Читаешь и выполняешь упражнения. Упражнения там хорошие - дикие задачи, прямо такие же, как в реальном мире.
    Про задачи

    Бывают задачи такие удобные во многих курсах, их проблема в том, что они легко решаются, потому что они так изначально удобно придуманы. В жизни всё по-другому: во-первых, всё неудобно; во-вторых, не всегда хватает знаний для решения задачи - то есть задача решабельна, но не на твоём текущем уровне развития.
    Поэтому важно решать именно неудобные задачи, так как это вырабатывает нужный опыт.

    2. Берёшь вузовские лабораторные работы для первого курса для любых языков. Переводишь их себе на C. Большинство задач начального уровня подходят под любой язык. А вузовские задачи направлены на выработку нужных навыков.
    Про навыки

    Есть сборники задач олимпиадных и есть сборники задач вузовских. Хоть и кажется, что вроде и то задачи и это задачи, но олимпиадные и вузовские задачи сделаны по-разному.
    Цель вуза - сделать студента программистом (инженером, который что-то строит из ничего), поэтому задачи формируются так, чтобы выработать вполне конкретные навыки, которые потребуются на более старших курсах.
    Цель олимпиады - выявить самых мыслящих. Для этого их не нужно ничему учить, им нужно дать какую-то забубённую задачу и смотреть, кто из них догадается, как её решить. То есть она ничему не учит.
    Поэтому не нужно тратить время на олимпиадные задачи, у них очень малая плотность выработки необходимых навыков. То есть интересная задача - это далеко не всегда полезная задача.

    И ещё
    Если есть что-то подобное, но для ANSI C, с геймификацией и интересностью, то вообще идеально.

    Ничего нет, не надо ждать подачек, сделай себе сам всё. Если ты хочешь научиться, делай то, что делали все те, кто реально умеет.
    Ответ написан
    Комментировать
  • Как в Xpath найти все элементы больше 1?

    @abcd0x00
    './/table[@id="RealDataGrid"]/tbody/tr[position()>1]'
    Ответ написан
    Комментировать
  • Как решить проблему поворота вектора в сторону заданных координат?

    @abcd0x00
    Но как то это не слишком помогает в решении проблемы.

    Так а в чём проблема?
    Угол лежит в промежутке от 0 до Пи. Если угол получился больше Пи, нужно взять оставшуюся часть и поменять у неё знак.
    Ответ написан
    Комментировать
  • Как установить/запустить программу tar.gz?

    @abcd0x00
    Архив распоковался при помощи менеджера архива и усе , где так сказать местный exe ?

    Потом заходишь в папку и делаешь
    ./configure
    Он подготавливает проект для сборки в этой архитектуре.

    Потом делаешь
    make
    Он собирает проект (как раз бинарные файлы нужные).

    Потом делаешь
    sudo make install
    Он устанавливает программу туда, где она должна быть.

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

    @abcd0x00
    Надо разделять файл обратно, определять в каждом куске кодировку, перекодировать его в общую кодировку, а потом соединять обратно перекодированное.
    Ответ написан
    Комментировать
  • Как найти минимальную (самую раннюю) дату?

    @abcd0x00
    >>> import datetime
    >>> 
    >>> lst = [[datetime.datetime(2016, 6, 19, 23, 5, 33, 899000),
    ...         datetime.datetime(2016, 6, 19, 23, 5, 33, 897000)],
    ...        [datetime.datetime(2016, 7, 31, 19, 29, 56, 608000),
    ...         datetime.datetime(2016, 7, 31, 19, 29, 56, 605000)]]
    >>> 
    >>> list(map(min, lst))
    [datetime.datetime(2016, 6, 19, 23, 5, 33, 897000), datetime.datetime(2016, 7, 31, 19, 29, 56, 605000)]
    >>>

    Если у тебя список неправильно сделан (много лишних вложенных списков), то сначала нужно его привести к правильному виду; не нужно писать код для неправильного списка.
    Ответ написан
  • Как понять рекурсию в Python?

    @abcd0x00
    Как понять рекурсию в Python?

    Нужно смотреть на функцию как на множество разных функций, похожих друг на друга. Поэтому когда функция вызывает саму себя, надо на это смотреть как на функцию, вызывающую очень похожую, но другую функцию. А когда функция вызывает другую функцию, они передают друг другу значения: вызывающая вызываемой подаёт параметры, а вызываемая вызывающей подаёт возвращаемое значение.
    Ответ написан
    1 комментарий
  • Как построить гистограмму?

    @abcd0x00
    Это сложное задание для новичка.

    1. Сначала нужно сделать лексический анализатор, который разделяет текст на лексемы. А ещё циклы могут быть вложенными - лексема в лексеме.

    2. Вот, а потом уже, когда у тебя есть поток лексем, ты можешь посчитать соответствующие лексемы - получить массив количеств.

    3. Когда у тебя будет массив количеств, его можно будет передать на построитель гистограммы.

    Построить гистограмму - это самое простое во всём этом задании.
    Ответ написан
    Комментировать
  • Как запустить wget с данными из двух массивов?

    @abcd0x00
    makeun.sh
    #!/bin/bash
    
    read_lines_pair()
    {
        echo "$(head -$1 $2 | tail -1) $(head -$1 $3 | tail -1)"
    }
    
    convert_line()
    {
        sed 's/^/wget /; s%[^ ]*$%-O ./img/&.jpg%'
    }
    
    process()
    {
        local len=$(wc -l urls.txt | cut -d' ' -f1)
        for i in `seq 1 $len`; do
            read_lines_pair $i urls.txt names.txt | convert_line
        done
    }
    
    process


    Вывод
    [guest@localhost makeun]$ ./makeun.sh 
    wget http://url.ru/some?v=86ff8d97yguifidgijdhfkjghdflkgjdf -O ./img/1321231321321321321.jpg
    wget http://url.ru/some?v=879874g65df4g65d4gf65d4f65g4 -O ./img/4564654654564654654.jpg
    wget http://url.ru/some?v=d89f7g98df7g987fd98g7d98f7gfd -O ./img/4654654654654654564.jpg
    [guest@localhost makeun]$


    Потом просто этот вывод передаёшь на sh по каналу.
    ./makeun.sh | sh
    Ответ написан
    Комментировать
  • Как получить из текста именованные сущности?

    @abcd0x00
    Как сам определяешь (в мозгах), так и программу сделай.

    Допустим, видишь, что существительное - это когда глагол справа, - значит, понял, что глагол - это глагол. А как понял? А у тебя список глаголов в памяти, потому что ты в школе учился и запомнил их. Если тебе дать на китайском текст, ты оттуда ничего не выберешь, потому что списка глаголов в памяти нет, так как в китайской школе ты не был. Значит, у тебя в программе должен храниться список глаголов, а слева от них нужно слово смотреть. Но слово слева может оказаться и наречием. А как понять, что наречие "легко", например, - это наречие? А надо список наречий иметь. Вот так программа должна просматривать точно такие же списки, какие у тебя в голове есть.

    Надо просто проанализировать, как ты сам понимаешь, где подходящее слово, а где нет, а потом сделать программу, которая максимально приближена к этому алгоритму.

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

    @abcd0x00
    Суть программы, удаление определенных файлов, очистка журналов, и сложный перебор ключей в реестре.

    Нужно построить иерархию исполнителей. А для этого нужно знать, что такое исполнитель.

    Как разложить

    Допустим, тебе надо удалять файлы - значит, тебе нужен исполнитель "удаляльщик файлов". Там у него несколько действий есть типа "проверить файл", "удалить файл". То есть удалением файлов занимается только он. Бывает, что при удалении файла, нужно его имя как-то составить, проверить, можно ли его удалять. Вот этим всем занимается этот "удаляльщик".

    Допустим, тебе надо очистить журнал - значит, тебе нужен исполнитель "обработчик журнала". Там у него несколько действий есть типа "найти запись", "добавить запись", "удалить запись". То есть операциями с журналом занимается только он.

    Допустим, тебе надо перебирать ключи в реестре - значит, тебе нужен исполнитель "обработчик реестра". Там у него несколько действий есть типа "найти ключ", "добавить ключ", "удалить ключ", "изменить ключ". То есть операциями с реестром занимается только он.

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

    Дальше ты пишешь функцию, которая управляет этим "дирижёром".

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

    @abcd0x00
    >>> numbers = (1, 2, 3)
    >>> fnames = ('file{}.txt'.format(i) for i in numbers)
    >>> files = [open(i, 'w', encoding='utf-8') for i in fnames]
    >>> files
    [<_io.TextIOWrapper name='file1.txt' mode='w' encoding='utf-8'>, <_io.TextIOWrapper name='file2.txt' mode='w' encoding='utf-8'>, <_io.TextIOWrapper name='file3.txt' mode='w' encoding='utf-8'>]
    >>> [i.close() for i in files]
    [None, None, None]
    >>>


    [guest@localhost t]$ ls
    file1.txt  file2.txt  file3.txt
    [guest@localhost t]$


    Вообще, файлы принято открывать через with. Если особой необходимости нет для ручного открытия и закрытия, то надо использовать with.
    Ответ написан
    Комментировать