LINUX.ORG.RU

Сообщения utrack

 

Такой странный PEP8

PEP8 рекомендует ставить побольше пробелов для читабельности кода, и в то же время говорит, что для ключевых слов использовать пробелы нежелательно. В чем прикол? Может они там сами никак не определятся?

Перемещено leave из general

 , , ,

utrack
()

Как убрать лишние пробелы при переносе строк?

Пытаюсь сделать вроде бы простую вещь - вместо нескольких функций print() сделать все в одной, печатая переменные в разных строках с помощью '\n', но почему-то, начиная со 2й строки добавляется один пробел, который непонятно откуда возникает. Внутри скобок пробелов нет. В переменных - просто числа.

print(a,'\n',b,'\n',c,'\n',d)

В выводе получается так:

1
 2
 3
 4

Откуда возникают пробелы и как их убрать?

Перемещено leave из general

 , , ,

utrack
()

Задача на сравнение 3х чисел

Чтобы попрактиковаться в питоне, друг предложил сделать «простую задачку». Простой она оказалась только на его словах… Он говорит, что в 5-6 строк делается. Можно использовать только if, сравнения и арифметические операторы, все остальное нельзя. Нельзя использовать готовые функции.

Задача такая. Вводим 3 числа, далее программа выводит их на экран в порядке возрастания. Плюс учитываем возможность того, что какие-то из них (или даже все) равны.

Сначала я потратил целый день, и получилось больше 100 строк. Все это время меня не покидало неприятное ощущение, что такого бреда быть не может. Я навелосипедил все возможные варианты и проверки, и получилась неприлично громадная программа. Но вроде кое-как работало… На следующий день я переделал, но получилось все-равно строк на 50. Потом я представил, а что если мне придется сравнивать 4 числа? А если 5? Это же тогда моя программа вообще разростется до миллиона строк. Но ведь друг сказал «всего 5 строк».

Гугл подсказывает кучу готовых решений, но открывать их не хочется. Может есть какой-то простой алгоритм для решений таких задач?

Перемещено leave из general

 , , ,

utrack
()

А чем так плоха функция eval() в питоне?

Недавно я попробовал сделать свой калькулятор на питоне. Но все застопорилось на моменте, когда надо было как-то преобразовать тип «строки» в арифметические операции, а такого в обычном преобразовании типов нет. И чтобы не городить небоскребы из if’ов, мне подсказали, что есть такая функция eval(), которая сделает все как надо.

Я начал гуглить как применить эту функцию, и действительно, у многих кто впервые ее использовал, возникал тот же вопрос, что и у меня - как сделать так, чтобы интерпретатор питона воспринимал арифметические символы при вводе через input() именно как арифметические операции, а не строки.

Но тут я полистал форумы, и на многих форумах отговаривают от использования eval(). Пишут, что использовать эту функцию нежелательно, т.к. она отъедает много ресурсов процессора, и вообще небезопасна, т.к. можно пропихнуть через эту функцию вредоносный код.

Так ли это на самом деле? Что за вредоносный код? Зачем кому-то пропихивать его в своей же программе? Если все так плохо, какие еще варианты?

Перемещено leave из general

 , , ,

utrack
()

Калькулятор на питоне, непонятно как сделать вывод

Попробовал сделать простейший калькулятор. Сначала вводим пару чисел, потом вводим операцию, которая будет к этим числам применяться. Вроде бы проще простого.

Сначала идет проверка, что введен один из допустимых знаков (арифметических операций). Потом еще несколько проверок... И доходим собственно до вывода. И тут начинается проблема.

Я более менее понимаю как работает функция print(), и даже попытался потыкать официальный мануал, но не нашел ничего такого, что помогло бы мне реализовать мои хотелки. А хотел бы я получить нечто вот такое:

print(n1 o n2)

Где «n1» и «n2» - это числа, «o» - операция.

Здесь естественно выйдет ошибка синтаксиса.

Например, такая запись в питоне работает:

print(n1 % n2)

А запись выше работать не будет. Потому что при вводе через input() в «o» записывается строка, и print() воспринимает переменную как строку, а не арифметическую операцию.

Посмотрел преобразование типов, там основные типы int, str, bool... Ничего нужного не нашел. Нет такого типа «арифметическая операция», чтобы можно было преобразовать в переменную и удобно подставить в print().

Неужели придется городить небоскреб из if'ов и print'ов для каждой операции, чтобы это обойти?

Не ищу готовое решение, но хоть намекните...

Перемещено leave из general

 , , ,

utrack
()

Одинарные или двойные кавычки для строк?

Есть ли официальные рекомендации, какие кавычки использовать для обозначения строк? Смотрю одни используют одинарные, а другие двойные. Но визуально с одинарными код смотрится как-то попроще…

 , , ,

utrack
()

Почему «local» не вошел в список ключевых слов Python?

Изучал тут список ключевых слов, и обнаружил, что nonlocal является ключевым словом, а local - нет. Почему так?

Перемещено leave из general

 , , ,

utrack
()

Ошибки и исключения в Python - не понимаю разницы!

Прочитал, что в питоне ошибки делятся на собственно ошибки (в общепринятом понимании) и т.н. «исключения». В основном на русскоязычных ресурсах описывается определенная разница между этими понятиями. Вроде как просто ошибка от исключения отличается только одной вещью - ошибку нельзя обработать, а с исключением можно что-то сделать.

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

С другой стороны - исключения. Ситуации, которые можно обработать. Например, программа завершилась из-за того, что в какой-то части происходит деление на 0. Эту ситуацию можно предугадать и обработать ввод пользователя, так чтобы ему выдавалось предупреждение изнутри программы, а не ошибка интерпретатора, и сделать так чтобы программа не завершалась, поэтому это называется исключением.

Но что-то я никак не пойму, существует ли в оригинале эта разница или нет? Или это кривые переводы русских руководств? Если существует, хочу увидеть полный список «просто ошибок» и исключений в официальном гайде.

А пока что вижу кучу разных мнений. Например, здесь почему-то выделяют отдельно только синтаксические ошибки, а все что не является синтаксической ошибкой - это типа исключения.

https://www.tutorialsteacher.com/python/error-types-in-python

Причем пишут, что во многих случаях ошибка может вылезти уже после запуска программы, и тогда это считается исключением. Но опять же, почему? В любой момент может кончиться память, допустим. И тогда программа вылетит - тоже после запуска. Это что теперь - тоже исключение? Ты же не можешь с этим ничего сделать, если в системе кончилась память. Какая-то путаница…

Или другая ссылка, кажется более официальная - «встроенные исключения». И здесь как я понял вообще ВСЕ ОШИБКИ называются исключениями. Перед названием каждой ошибки стоит слово «exception», например, exception SyntaxError. Да тут кругом один сплошной exception.

https://docs.python.org/3/library/exceptions.html

Так кто прав? В питоне все ошибки это исключения, или не все? Где прочитать про разницу и увидеть полный список того и другого?

 , , ,

utrack
()

Kdevelop не подходит для новичков и «консольщиков»

Решил попробовать Kdevelop. Повелся на рекламу поддержки Python.

Начал новый проект, там даже отдельные темплейты для питона есть - Simple Qt GUI или Simple Python App (без графики).

Ну думаю, щас запилю простенький скрипт со вводом с клавиатуры, как полагается. А нихрена! Оказалось, в Kdevelop не поддерживается ввод с клавиатуры. Я такой «штооооооо???»

Обычная питоновская функция input() просто не работает в Kdevelop. Невозможно написать даже простенький консольный скрипт со вводом с клавиатуры. Я бы понял, если бы это была пре-альфа версия IDE, но она разрабатывается уже 21 год, а поддержка питона добавлена примерно 5 лет назад…

Эта IDE совершенно не подходит для новичков и программистов, которые пишут консольные программы, в которых нужно что-то вводить с клавиатуры. Это IDE исключительно для тех, кто шлепает формочки.

 , , , ,

utrack
()

Kdevelop - не работает ввод с клавиатуры во время выполнения скрипта

Вывод на экран работает нормально. Если в скрипте написать print('hello'), и нажать Execute, то скрипт выполнится и закончится вот так.

hello
*** Exited normally ***

А как осуществить ввод с клавиатуры - непонятно. Если в программе есть input(), то скрипт не завершается словами «Exited normally», но и приглашения на ввод (как в обычной консоли) я не вижу. Нажимаю Execute, выполняются другие операторы, а когда доходит до input() - ничего не происходит.

 , , ,

utrack
()

RSS подписка на новые темы