Python: проверка на прерывание цикла

В Python у циклов while и for есть опциональный блок else, который проверяет, выполнился ли цикл полностью. Если ключевое слово break не было вызвано, будет выполнен блок else.

while… else:

numbers = [1, 3, 5]

position = 0

while position < len(numbers):
    number = numbers[position]
    if number % 2 == 0:
        print('Найдено четное число', number)
        break
    position += 1
else:
    print('Четное число не найдено')

for… else:

numbers = [1, 3, 5]

for number in numbers:
    if number % 2 == 0:
        print('Найдено четное число', number)
        break
else:
    print('Четное число не найдено')

Подобная конструкция позволяет выполнить некоторое действие при полном завершении работы с циклом (вывод сообщения здесь — явный флаг штатного завершения обхода цикла):

for name in ['Алиса', 'Боб']:
    print(name)
else:
    print('Обход цикла завершен')

PHP: Проверка строк, содержащих числа

Если на входе есть строка, которая может содержать целое число или число с плавающей точкой и нужно эту строку привести к нужному состоянию, то можно сделать так:

if (is_numeric($string)) {
    if ((int)$string == $string) {
        $string = (int)$string;
    } else {
        $string = (float)$string;
    }
}

Функция is_numeric проверяет, является ли переменная числом или строкой, содержащей число (ни is_int, ни is_float не делают вторую часть проверки и при получении строки на входе возвращают false). Далее приводим строку к целому числу и делаем нестрогое сравнение, чтобы убедиться, что перед нами действительно целое число.

PhpStorm не видит переменные переменных

PhpStorm не видит динамическое определение переменных. Вот код, в котором IDE видит ошибки там, где их нет:

foreach (array('foo', 'bar', 'baz') as $postfix) {
    $postfixedVariableName = sprintf('variable_%s', $postfix);
    $$postfixedVariableName = $postfix;
}
echo $variable_foo, PHP_EOL; // PhpStorm: Undefined variable 'variable_foo'
echo $variable_bar, PHP_EOL; // PhpStorm: Undefined variable 'variable_bar'
echo $variable_baz, PHP_EOL; // PhpStorm: Undefined variable 'variable_baz'

Чтобы PhpStorm увидел подобные переменные, необходимо добавить декларацию переменных в текущей области видимости:

/** @var $variable_foo */
/** @var $variable_bar */
/** @var $variable_baz */
foreach (array('foo', 'bar', 'baz') as $postfix) {
    $postfixedVariableName = sprintf('variable_%s', $postfix);
    $$postfixedVariableName = $postfix;
}
// ...

PHP: добавить элемент в середину массива

Функция array_splice() удаляет length элементов, расположенных на расстоянии offset из массива input, и заменяет их элементами массива replacement, если он передан в качестве параметра. Эту функцию можно использовать для вставки, замены и удаления элементов массива.

Если передать третьим параметром ноль, то никакие элементы массива не будут удалены.

$input = ["red", "green", "blue", "yellow"];
array_splice($input, 3, 0, "white");
// => ["red", "green", "blue", "white", "yellow"];
array_splice($input, 3, 0, ["purple", "black"]);
// => ["red", "green", "blue", "purple", 
//     "black", "white", "yellow"]

Важный момент. Если передается единичный элемент, то нет необходимости заключать его в массив, если только этот элемент сам не является массивом, объектом или NULL.

Партиционирование по списку в MySQL

Партиционирование (секционирование) данных — это реально крутая штука при больших объемах данных. Вот рабочий пример. Допустим, у нас есть два списка: грамматические категории и словоформы. Первому списку соответствует таблица grammar, второму — forms. В таблицах 65 и 4058805 записей соответственно. Отношение между таблицами — многие-ко-многим, роль вспомогательной таблицы выполняет таблица morphology. В ней 23044224 записей. Её-то мы и будем партиционировать.

Продолжить чтение →

Порядок в телефонной книге

  1. Когда вы записываете новый номер в телефонную книгу, припишите к имени дату звонка. Со временем будет проще найти актуальный номер: дата информативнее, чем помета типа «Сергей (новый)».
  2. Записывайте не только имена, но и фамилии. Так будет легче найти конкретного Михаила, и сразу понять, какая из Анастасий звонит.
  3. К телефонам фирм (такси, вокзалы, поликлиника), приписывайте название города. Все мы переезжаем, поэтому со временем понять, к какому городу относится тот или иной номер будет трудно.
  4. Обозначения типа зайка, солнышко заменяйте на имена и фамилии. Представьте, что вы выступаете с презентацией перед руководством компании. И в это время начинает звонить ваш телефон, оставленный на столе. Сидящий рядом с ним директор смотрит на экран и видит, что звонит красотулька. Тот самый неловкий момент. Исключения — мама, папа, дочь, сын, дом.
  5. Чувак на девятке, рыжая телочка, фиг знает кто… —  это пометки, которые надо по возможности заменять на нормальные имена. Уже потому, через пару недель вы уже не вспомните, кто это такой — чувак на девятке.

Общая ориентир: если в вашей телефонной книге сможет сориентироваться другой человек, значит все нормально.

Сортировка записей с учетом регистра в MS Access

В Microsoft Access записи сортируются по возрастанию или по убыванию без учета регистра. Однако при сортировке по кодам ASCII прописные и строчные буквы различаются, что и позволяет выполнять сортировку с учетом регистра. При помощи небольшого трюка можно обойтись и без VBA.

В конструкторе запросов создаем новое поле и пишем в нем:

code: Asc(Left([table]![field];1))

Вспомогательное поле должно стоять в конструкторе запросов ДО сортируемого поля — тогда при сортировке данные будут отсортированы в первую очередь по нему:

Объяснение процесса. table, field — это название таблицы и поля, данные в которых нужно отсортировать. Функция Left() используется для получения первого символа в поле, по которому мы сортируем данные. Функция Asc() возвращает ASCII-код для первого символа. code: — название вспомогательного поля.

Как лучше всего поздравить человека с днем рождения

Запомните раз и навсегда: нет такой обязанности — поздравлять людей, пусть даже близких. Это действие добровольное. Поздравляйте только тогда, когда вы правда этого хотите.

Если есть возможность поздравить человека лично, сделайте это. Не можете поздравить лично — позвоните. Не можете позвонить — пошлите открытку (настоящую, по почте) или телеграмму. Ни в коем случае не шлите смс. Представьте себе, что вы получили пятьдесят смс с поздравлениями. Правила приличия требуют, чтобы вы отправили «спасибо» на каждое из них. Удобно ли это? В самом крайнем-крайнем случае напишите поздраление по электронной почте или пошлите личное (!) сообщение в социальной сети. Когда вы поздравляете лично или по телефону, вы точно знаете, что вас слышат. Когда поздравляете по электронной почте — нет никаких гарантий, что ваше поздравление будет прочитано. Продолжить чтение →

Недопустимый знак в полном имени xml

Если при импорте xml-файла выдается сообщение типа «Не удается открыть файл из-за ошибок его содержимого. Сведения: Недопустимый знак в полном имени.» — откройте этот файл в обычном блокноте и поищите два или более символов <  подряд (<< или <<<) замените их на одинарный < и файл откроется без проблем.