Страницы

Поиск по вопросам

четверг, 6 декабря 2018 г.

Убрать стрелочки с

Есть input с типом number и при наведении на него появляются такие стрелочки:


Можно ли как-то их убрать?


Ответ

input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { /* display: none; <- Crashes Chrome on hover */ -webkit-appearance: none; margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ }
Ответ тут.

Развернуть слово

Надо развернуть слова наоборот, чтобы при этом небуквенные символы оставались на своих местах.
Например: a1bcd => d1cba


Ответ

Заводим указатели на начало и конец строки, идем в цикле, первый указатель увеличиваем, второй уменьшаем, цифры проскакиваем. Меняем между собой буквы на которые смотрят указатели. Завершаемся, когда указатели сравнялись.
В виде кода как то так (правда вы язык не указали):
int j = 0; int k = ch.length-1; while(j

Зачем использовать Python2 вместо Python3?

Почему некоторые продолжают использовать интерпретатор предыдущей версии, почему он еще не умер и не забыт?
Третья версия ушла далеко вперед (один async и новый GIL чего стоят), многие библиотеки были портированы (ранее, например, был повод использовать Py2 - OpenCV, но и ее портировали).
Единственный повод - поддержка старых проектов и невозможность переезда, но по-прежнему есть те, кто стартует новые проекты на Py2. Новые вопросы на StackOverflow появляются.
Зачем, какие очевидные причины?


Ответ

Очевидной причиной является несовместимость большинства старых рабочих тестированных Питон 2 программ с Питон 3.
Даже если большинство изменений тривиально (и может быть автоматизированно), переход на Питон 3 требует наличия тестов и времени программистов, трату которого надо обосновать. Питон 2 сам по себе уже хорошим языком является. Питон 3 местами лучше, но для каких-то задач может даже хуже показаться на первый взгляд.
Даже если разработчики могут найти время для перехода на новый язык, учитывая что программисты люди любознательные, Питон 3 может конкурировать с переходом и на другие языки такие как Go, OCaml (Питон 3 несовместим, но он "недостаточно несовместим" если что-то новое хочется попробовать).
Изначальной адаптации Питона 3 не помогало, то что первые версии (до Питон 3.2-3.3) не были предназначены для широкого использования. Большинство книг/ресурсов в сети использовали Питон 2 синтаксис. Обычно, предустановленная команда python запускает Питон 2 на POSIX системах.
Большинство живых популярных библиотек работают как на Питоне 2 так и 3. Существует "длинный хвост" библиотек, которые только на Питоне 2 работают (публичные и внутренние инструменты).
Из-за заявленной долгосрочной (на данный момент до 2020) официальной поддержки Питона 2, люди немного теряют оставаясь на Питоне 2 (хотя люди часто недооценивают время жизни программ).
Заставлять программистов учить разницу между текстом, представленным в виде Unicode строк и байтами создаёт заметный барьер для смены версий для нового кода. Особенно, если программист работает в окружении где текст в основном представлен в виде байт, закодированных в utf-8, или хуже: семантически текстовые интерфейсы используют исторически байтовые API на POSIX системах, которые допускают произвольные последовательности байтов (имена файлов, параметры командной строки, переменные окружения), что требует таких вещей как surrogateescape, чтобы продолжить с Unicode работать по умолчанию.
Уроки
Чтобы не повторять ошибок, можно было бы избежать смены основной версии и вводить новые изменения поэтапно (Python 4 в понимании Python 3 не должно быть):
не накапливать много несовместимых изменений, которые нужно научиться использовать и искать способ подружить со старым кодом (низкая стоимость перехода) возможно большинство новых фич убрать под from __future__ import division, print_function, unicode_literals, etc, которая включается через несколько выпусков по умолчанию (позволяет тестировать, преобразовывать код по одному модулю за раз) публиковать на PyPI модули, облегчающие переход с версии на версию, например, contextlib2, pathlib2, subprocess32, etc предоставить возможность исполнять старый код на новой версии без изменений (чтобы старые программы поддерживать—это относительно просто, если другие пункты также реализовать) конвертировать новую версию в старую, чтобы новый код в старом окружении исполнять (новые программы можно было бы на новой версии языка писать, а исполнять в старом окружении) (3to2 вместо 2to3—см. futurize и pasturize скрипты) ограничить поддержку старых версий (как сейчас 3.2, 3.3, 3.4, 3.5 поддерживаются) — только одна официальная текущая версия языка (чтобы ненужный выбор не создавать) использование semver для языка может быть вредно по психологическим причинам: вместо 3.0 можно было 2.6 выпустить с меньшим набором новых фич (изменение основной цифры может пугать без оснований) медленно убирать старые особо зловредные фичи — упомянуть в документации лучший путь, но фактически задержать на несколько лет удаление старого кода (адаптация под каждую новую версию в любом случае может требовать работы—так барьер между перехода на каждую версию не слишком высок)
В итоге:
люди, которые любят новые блестящие штучки, могут их использовать, не ожидая перехода всей кодовой базы на новую версию люди, которым надо чтоб продолжало работать, также довольны—старый код не должен ломаться (за исключением обычного ожидаемого подкручивания гаек при переходе на новую версию) особо консервативные люди продолжают сидеть на Python 2.4, 2.6 новички просто начинают с текущей единственной версии

Стоит ли продолжать начинания в изучении Python как основного? [закрыт]

Мне симпатизирует синтаксис, но язык кажется каким-то больше вспомогательным сам по себе. Да, есть фреймворки, но тот же Джанго относительно не столь популярен. Но на данный момент это единственный язык, который я знаю на начальном уровне, и стоит ли продолжать?
Не хочу ситуацию, чтоб я остался на улице, а PHP/C++/Java-элита бы пожинала плоды.


Ответ

1. Мнение
Python — не «вспомогательный» язык, это популярный язык программирования, продолжать изучение стоит, на улице при соответствующем уровне знаний не останетесь.

2. Аргументация
2.1. Рейтинги популярности языков программирования
PYPL — второе место на февраль 2018;
Redmonk — третье место на июнь 2017; TIOBE — четвёртое место на январь 2018;
Trendy Skills — пятое место на февраль 2018. Правда, на 4-м месте в этом рейтинге HTML, не являющийся языком программирования.

2.2.Рейтинги востребованности рабочих мест
Indeed — 2-е место на ноябрь 2017;
Indeed другая статистика — 4-е место на декабрь 2017.

2.3. Рейтинги языков программирования по зарплате разработчиков
ChallengeRocket — 3-е место на февраль 2017.

См. также перевод отрывка, посвящённого Python:
Это универсальный и понятный язык, используемый крупными игроками в технологической индустрии (Google, NASA). Принимая во внимание, что уже в 2016 инженер-программист со знанием Python может заработать до $100 000, мы прогнозируем, что годовой оклад Senior Python Developer будет колебаться вокруг суммы $105 000 и выше. Это объясняется в значительной степени популярностью языка и его частым появлением в списках требований в процедурах найма на работу. Согласно рейтингу TIOBE, Python находится на 5-м месте по количеству запросов в основных поисковых системах, поэтому аналитики предполагают, что его популярность будет продолжать расти. За последние 5 лет популярность Python демонстрировала наибольшие темпы роста в этом аспекте (6,8%, когда, например, PHP имеет -5,0%).

3. Дополнительная информация
О том, как вычисляются рейтинги, в большинстве случаев можно посмотреть по ссылкам на эти рейтинги. См. также:
Краткое описание, какие критерии берутся в расчёт для некоторых из перечисленных выше рейтингов

В Linux Debian нет стандартно программы make. Как устанавливать?

Установил Linux Debian. Все стандартные программы есть, а хочу установить pindgin и ещё парочку. А там надо из исходников собирать. А там нужен make. Ввел в терминале make Вывел bash: make: команда не найдена. Скачал этот make с офф. сайта. Глянул файл INSTALL и README. Ничего не понял. Как установить этот make? Напишите пожалуйста.


Ответ

Если есть необходимость компилировать софт, то одного make может быть мало. Поэтому обычно более оптимальным является установка пакета build-essential, который содержит make в том числе. В убунте он поставит к примеру dpkg-dev (package building tools for Debian g++ (The GNU C++ compiler), gcc (The GNU C compiler), libc6-dev (GNU C Library: Development Libraries and Header Files) or libc-dev (virtual package provided by libc6-dev) и make. В Debian приблизительно тоже. Поэтому рекомендую такую последовательность sudo -s apt-get update #это желательно, если хочется все новенькое apt-get install build-essential

Русский язык в исходном коде в Dev C++ [дубликат]

На данный вопрос уже ответили: Русский язык в консоли 3 ответа Я недавно начал изучать С++, у меня есть компилятор Dev C++. Когда я делаю
std::cout<<"Привет!";
то получается абракадабра! А если перебираю символы циклом, то русские буквы отображаются правильно. Я думаю проблема в различии кодировок dos и windows. Кто знает какие-нибудь примочки для Dev C++ (типа keycyr для pascal) или операторы/функции/процедуры C++ позволяющие сменить кодировку std::cout.


Ответ

С setlocale() по науке правильно, но если локализация кривовата (как у меня на этой машине), то не работает.
В Windows есть 2 функции, CharToOem(char, char) и OemToChar(char, char) для перевода cp-1251 в cp-866 (консоль) и обратно.
Пример:
#include #include #include #include
main () { char str[1000], buf[1000]; int itty = isatty(fileno(stdin)), otty = isatty(fileno(stdout));
strcpy(str, "привет"); if(otty) CharToOem(str, str); puts(str);
fgets(str, 1000, stdin); if (itty) OemToChar(str, str);
str[strlen(str) - 1] = `\0`; if (strstr("привет", str)) strcpy(buf, "да, часть от 'привет'"); else strcpy(buf, "такого нет в слове 'привет'"); if(otty) CharToOem(buf, buf); puts(buf); }
В программе набрано в cp-1251 (она же ANSI).
При вводе с консоли, независимо от setlocale() придется переводить кодировку. Также обратите внимание, что параметры командной строки, набранные в консоли поступают в программу в кодировке cp-1251!!!
Кодировка в файлах обычно подразумевается в cp-1251, это надо учитывать при переадресации (>) вывода (stdout, stderr). Я продемонстрировал в примере, как это можно делать.
UPDATE
@insolor дал замечательный ответ как правильно программировать работу с русскими буквами в консоли Windows, используя стандартные функции SetConsoleCP(1251) и SetConsoleOutputCP(1251)
В обсуждении (комментариях) к его ответу можно найти различные детали, в частности установку русского шрифта.
Похоже его ответ прошел незамеченным для некоторых участников форума. Поэтому я решил привести функцию, вызов которой в самом начале упрощает программирование ввода/вывода русских букв в Windows и пример ее использования.
cons1251.c
#include
static int oldin = 0, oldout = 0;
static void exitfunc() { SetConsoleCP(oldin); SetConsoleOutputCP(oldout); }
void cons1251 () { if (oldin) return;
atexit(exitfunc);
oldin = GetConsoleCP(); oldout = GetConsoleOutputCP(); SetConsoleCP(1251); SetConsoleOutputCP(1251);
} rustest.c
#include // русский текст в кодировке cp1251 (она же ANSI) // обратите внимание, не нужен
main() { printf ("This is russian [аБвГдЕ] before cons1251()
"); cons1251(); printf ("This is russian [аБвГдЕ] after cons1251()
");
char str[1000], buf[1000];
printf ("Привет - введи часть от \"привет\"
"); fflush(stdout);
fgets(str,1000,stdin); str[strlen(str)-1] = 0;
printf("Вы ввели: '%s'
",str); if(strstr("привет",str)) printf("да, часть от 'привет'
"); else printf("такого нет в слове 'привет'
"); fflush(stdout);
puts("ждем ввода to exit..."); fflush(stdout); fgets(str,1000,stdin); }
Вызов fflush(stdout) при работе с консолью (tty) необязателен, однако для вывода в некоторых эмуляторах терминала (например в Emacs eshell) необходим.
Это пример компиляции (Windows 7, Emacs eshell) окно в cp1251 поэтому вывод русского текста и до и после cons1251() одинаковый (и правильный).
c:/Users/avp/src/cc/hashcode $ gcc -c cons1251.c c:/Users/avp/src/cc/hashcode $ gcc rustest.c cons1251.o -o rustest c:/Users/avp/src/cc/hashcode $ ./rustest This is russian [аБвГдЕ] before cons1251() This is russian [аБвГдЕ] after cons1251() Привет - введи часть от "привет" иве Вы ввели: 'иве' да, часть от 'привет' ждем ввода to exit...
c:/Users/avp/src/cc/hashcode $ c:/Users/avp/src/cc/hashcode $
К сожалению для стандартного cmd-окошка Copy/Paste не работает, так что попробуйте сами.
Для окна с PowerShell в Win 7 этот метод к сожалению не работает (в отличие от «геморройного» CharToOem/OemToChar).
Надеюсь этот текст окажется кому-то полезным.
UPDATE 2 (for @Rules)
Исходный файл tt.cpp
#include
extern "C" void cons1251(void);
main() { std::cout << "Привет, введите слово
"; cons1251(); std::cout << "Привет, введите слово
"; char str[100]; std::cin >> str; std::cout << "Вы ввели: " << str << std::endl; }
c:/Documents and Settings/avp/src/hashcode $ g++ tt.cpp cons1251.o -o tt c:/Documents and Settings/avp/src/hashcode $ ./tt Привет, введите слово Привет, введите слово йцукен Вы ввели: йцукен c:/Documents and Settings/avp/src/hashcode $
Пример вывода из эмулятора терминала Emacs eshell. Поэтому первый «Привет...» тоже состоит из нормальных букв. В обычной консоли там «кракозябры», а дальше нормальная кириллица.
Обращаю особое внимание. Перед запуском надо изменить шрифт в консоли на Lucida Console. Иначе будут кракозябры (но другие). Для замены шрифта кликаете правой кнопкой на надписи «Командная строка» окна консоли. В открывшемся меню выбираете «Свойства». В появившемся окне выбираете вкладку «Шрифт» и там выбираете «Lucida Console». Потом подтверждаете, что попросит.
Если при подтверждении выбрать пункт «Изменить ярлык для запуска этого окна», то новые окна командной строки будут уже с нужным шрифтом.
Вроде все.

Как заставить генератор случайных чисел давать дробные значения?

Не могу понять как заставить генератор случайных чисел давать дробные значения. Пробовал сделать так. A = rand() % 158.691+(-1.235); не получилось. Интервал от -1.235 и 157.456. #include #include #include using namespace std;
int main() { int N,M; int max = 157456, min = -1235; cout << "Enter size of matrix A:N " << endl; cin >> M; cout << "Enter size of matrix A:M " << endl; cin >> N; cout << "Creating matrix A:" << endl; // Создаётся матрица A float **A = new float* [M]; srand(time(NULL)); int i = 0; do { A[i] = new float [N]; i++; } while(i cout << endl << endl;
// Освобождение памяти for (int i = 0; i < N; i ++) delete [] A[i]; delete [] A; system("pause"); return 0; }


Ответ

На самом деле всё просто.
// Генерирует случайное действительное число от 0 до 1 (double)(rand())/RAND_MAX // Генерирует случайное действительное число от 0 до N (double)(rand())/RAND_MAX * N
Вот пример:
#include #include #include using namespace std;
// Функция, генерирующая случайное действительное число от min до max double random(double min, double max) { return (double)(rand())/RAND_MAX*(max - min) + min; }
int main() { srand((unsigned int)time(0)); cout << random(-1.235, 157.456) << endl; return 0; }
Здесь проверка.