Языковая политика

Общие обсуждения => Компьютеры и интернет => Topic started by: Euskaldun on 02 June 2023, 10:49:07

Title: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 10:49:07
У вас есть рекомендации по простой, но удобной графической оболочке в которой можно поиграться с питоном? Я как представляю - два окна, одно с программой, другой с консолью вывода. Ну и там кнопки сохранить, открыть - больше особо ничего не надо. Просто как-то хотелось бы видеть программу перед глазами и результат, командная строка не нравится поэтому
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 10:55:50
у меня задумка : сделать прогрессивно усложняющуюся программу, добавляя в неё пошагово задачи - ну что было ясно мне самому что работает, а где уже косяк. Например, 1) создать массив с текстовой информацией (попуп для введения числа элементов, цикл по вводу данных, сохранение массива в ткст), 2) открыть уже существующий массив из ткст, считать данные (определить число элементов, цикл по считыванию), 3) функция по дополнению массива, по стиранию элементов 4) редактирование в стиле файнд-н-реплейс и т.д. вот что-то такое представляю, для поучиться - самое то, как думаете?
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 12:38:50
У вас есть рекомендации по простой, но удобной графической оболочке в которой можно поиграться с питоном? Я как представляю - два окна, одно с программой, другой с консолью вывода. Ну и там кнопки сохранить, открыть - больше особо ничего не надо. Просто как-то хотелось бы видеть программу перед глазами и результат, командная строка не нравится поэтому

Можно попробовать PyCharm, но он жирноват.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 12:56:49
для поучиться - самое то, как думаете?

Вроде звучит неплохо. :up:
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 02 June 2023, 13:00:56
VSCode немного менее жирный.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 13:04:02
а это даром всё или за $$$?
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 13:11:14
Конечно, даром, за кого вы нас принимаете? :) У PyCharm есть платная версия professional, но бесплатная вполне юзабельна, просто поменьше наворотов.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 13:13:57
пишут, что чарм очень тормозит компьютер и много места занимает. может начать с попроще? вы же видите, что я буду програмки на уровне школоты писать ;D
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 02 June 2023, 13:22:02
Как по мне, как раз на начальном уровне очень важна такая вещь, как автодополнение. Скажем, набираешь "f=open(" -- и сразу показывается, какие параметры принимает функция open. Потом на следующей строчке набираешь "f." -- и сразу видно какие методы есть у объекта "f". В PyCharm всё это скорее всего будет из коробки, в vscode нужно будет ещё поставить питоновский Extension, да и вообще там настройка более сложная для непрограммиста.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 13:28:05
Попробуйте, вдруг нормально будет работать, можно же снести. Жрёт много памяти - ради удобства пользователя!

VS Code тоже должно быть нормально. Я не писал в нём на питоне, сейчас создал файл - он сам предложил расширение поставить. Скрипт внутри него тоже запускается.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 13:42:53
почитал синтаксис - какая радость, особенно обрадовали string[-1],… - помню как надо было через задницу с LEN делать в бейсике :yes:
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 02 June 2023, 16:14:36
А что Вы называете консолью, чёрное окошечко с построчным вводом или стандартный IDLE?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 16:30:59
А что Вы называете консолью, чёрное окошечко с построчным вводом или стандартный IDLE?
просто окно результата, где видно что программа делает
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 16:32:19
досовский промпт не хочу так как неудобно вносить изменения в уже написанное, потому лучше 2 окна: в одном программа, во втором аутпут
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 02 June 2023, 16:49:17
Ну, для этого IDE собственно не нужна, нужен просто достаточно функциональный шелл, скажем Konsole так умеет.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 02 June 2023, 16:53:07
А что Вы называете консолью, чёрное окошечко с построчным вводом или стандартный IDLE?
просто окно результата, где видно что программа делает
Если в IDLE открыть новый файл, он не будет консолью, он будет обычным текстовым файлом с кодом программы.
И её можно будет запустить и выводить из неё в консоль что захотите.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 02 June 2023, 16:58:47
Вот примеры работы в двух окошечках (код+консоль) и трёх (код+консоль+графический вывод).

(http://puu.sh/JIczf.png)

(http://puu.sh/JIczt.png)
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 17:19:37
Аплайнер - во, я именно что-то такое и представлял. И мне автоисправления и автодебаггинг не нужны, наоборот, все ошибки желательно находить и исправлять самому - так лучше обучение пройдет
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 02 June 2023, 17:28:41
В винде тоже уже сделали новый терминал, где можно разделять окна:
https://learn.microsoft.com/en-us/windows/terminal/panes
В качестве текстового редактора можно использовать Far
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 17:32:56
Кстати, чтобы иметь два окна, можно на худой конец открыть независимо друг от друга два окна: (абсолютно любой) редактор и терминал.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 17:33:27
Кстати, чтобы иметь два окна, можно на худой конец открыть независимо друг от друга два окна: (абсолютно любой) редактор и терминал.
да, но как не хотелось бы копи-пастить туда обратно
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 02 June 2023, 17:37:46
да, но как не хотелось бы копи-пастить туда обратно
Не понял, что там копи-пастить?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 17:39:24
Не понял, что там копи-пастить?
а как программа перенесется в терминал из редактора? телепортацией? :)
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 17:40:12
да, но как не хотелось бы копи-пастить туда обратно

Не, не копипастить, просто запускать файл. В редакторе редактируем файл hello.py, в терминале (в той же директории) запускаем python hello.py.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 17:42:26
типа его сейвом, а во втором окне запускать?
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 17:44:21
типа его сейвом, а во втором окне запускать?

Ага, именно так.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 02 June 2023, 17:45:49
ну тоже вариант, а вот как у паскаля нет? два окошка, в одном программа, нажал кнопку - во втором аутпут :)
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 02 June 2023, 18:40:31
Мои скрины вообще никто не видит, что ли?
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 02 June 2023, 18:58:19
Мои скрины вообще никто не видит, что ли?

Я вижу!

Вот, кстати, нагуглилась похожая штука, но в одном окошке: и редактор, и терминал https://thonny.org/ Суперминималистичная!
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 02 June 2023, 19:59:31
Quote from:
Installer with 32-bit Python 3.8, suitable for all Windows versions since 7
thonny-py38-4.0.2.exe (18.9 MB) ⇐ recommended for you
А чё это он мне рекомендует то, что мне не подходит?
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 02 June 2023, 22:02:55
А чё это он мне рекомендует то, что мне не подходит?
Система рекомендаций сломалась от вашей древности.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 14:25:58
Остановился на Тhonny, самое то, как раз как представлял, спасибо за наводку!  :up:

Начал играться с конвертацией переменных и вот такой вопрос:
Quote
# Assignment
pi = 3.14159
# checking the type
print(type(pi))
# conversion& printing
pi_int = bool(pi)
print(pi_int)

почему ответ True? ??? :-\ Что именно питон делает при конвертации не 0/1 в булевые переменные?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 14:32:40
А это?
Quote
>>> bool("Путин мудак")
True
Я конечно не против, но хотелось бы сочные детали  ;D
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 10 June 2023, 16:00:12
"Ложные" значения превращаются в False, остальные - в True. "Ложных" значений много: 0, None, пустые строка/список/словарь/тупл, а также, оказывается, можно определять кастомные (я не знал): https://docs.python.org/3/library/stdtypes.html#truth-value-testing Имхо, сомнительный дизайн, но что есть, то есть.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 16:42:11
спасибо! т.е. упрощая False для чисел это нули, а для стрингов - пустые? разумно, уже представляю как с помощью bool() можно экономить некоторые логические тесты
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 10 June 2023, 17:14:03
спасибо! т.е. упрощая False для чисел это нули, а для стрингов - пустые? разумно, уже представляю как с помощью bool() можно экономить некоторые логические тесты

Ага. Экономить можно и без применения bool, потому что в тест может идти любое значение, не только True/False. Например, если s - строка:
Code: [Select]
if s:
    print('Первая литера:', s[0])
else:
    print('Пустая строка')
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 10 June 2023, 17:14:37
Квасе, опередили :).

Автоматическое приведение типов — сила. Силы которой си/плюсы не знают :lol:.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 17:30:43
Силы которой си/плюсы не знают :lol:.
Что за бред? В сях тоже можно в if числа совать. А в C++ можно вообще как угодно переопределять конверсию типов, не хуже, чем в Питоне. А вот такая конверсия как в JS типа "1" + 2 -- зло.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 10 June 2023, 17:48:59
Переопределять и в Питоне можно. А мы про ситуацию из коробочки.
В случае со строками в JS всё более-менее логично: со строкой может конкатенировать только строка, потому следующие после строки операнды и приводятся к строке.
А что там до — это уже порядок исполнения.
Каковой порядок и для приведения есть.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 18:01:21

Ага. Экономить можно и без применения bool, потому что в тест может идти любое значение, не только True/False. Например, если s - строка:
Code: [Select]
if s:
    print('Первая литера:', s[0])
else:
    print('Пустая строка')
а если s случайно флоутом окажется, то что сделает s[0]? вернет первую цифру?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 18:03:32
. А вот такая конверсия как в JS типа "1" + 2 -- зло.
я сегодня долго смотрел на print(“hey “ * 2), и не мог поверить, что такое работает
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 18:07:34
Переопределять и в Питоне можно. А мы про ситуацию из коробочки.
В Питоне сначала привыкаешь что угодно совать в if, а потом суёшь numpy.ndarray и получаешь по рукам в рантайме, а потом выискиваешь по всему проекту, где ещё могло быть такое. И не помню, ловит ли pylint такие ошибки, ну и понятно, что он в принципе может такое словить только если есть аннотации типов.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 18:43:39
а если s случайно флоутом окажется, то что сделает s[0]? вернет первую цифру?
Ошибку выдаст
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 10 June 2023, 19:00:28
В Питоне сначала привыкаешь что угодно совать в if, а потом суёшь numpy.ndarray и получаешь по рукам в рантайме
Ну вот за такое точно надо бить по рукам писателей numpy, а не писателей Python.
А зачем, интересно, массив в if совать? Такое и в JS может интересным боком вылезти.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 10 June 2023, 19:02:26
я сегодня долго смотрел на print(“hey “ * 2), и не мог поверить, что такое работает
Это не баг, это фича.
Тот, кто только BASIC знает, может, тоже на лямбды круглыми глазами смотрит и не может поверить.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 19:11:34
А зачем, интересно, массив в if совать? Такое и в JS может интересным боком вылезти.
Затем же, зачем и для C++-ного вектора хочется, чтобы if (a) был эквивалентен if (!a.empty())
А так в C/C++ имплицитное приведение к bool для чисел и указателей (в том числе умных), этого уже достаточно, чтобы утверждать, что там тоже есть эта сила.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 10 June 2023, 19:18:47
А зачем, интересно, массив в if совать? Такое и в JS может интересным боком вылезти.
Затем же, зачем и для C++-ного вектора хочется, чтобы if (a) был эквивалентен if (!a.empty())
Хм. А если a пустой?

Насчёт массива в JS я, правда, немного ошибся, любой объект (https://learn.javascript.ru/object-toprimitive) приводится к true. А вот если сначала приведётся к строке, может случиться ой.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 19:44:13
Хм. А если a пустой?
Так именно это же и проверяем
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 10 June 2023, 20:23:29
А-а, ступил. Хотя не помешало бы логическому методу иметь название типа isEmpty.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 21:00:01
Это не баг, это фича.
Тот, кто только BASIC знает, может, тоже на лямбды круглыми глазами смотрит и не может поверить.
так я верю, но мне как хардкорному бейсикисту было дико. Тем более, что было в тесте на знание синтаксиса («найди неправильное выражение») и мне точно показалось, что за такое компьютер трасерами расстреливает ??? :-\
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 23:19:22
Делаю питоновский курс от IBM, они все практику делают в Junyper Notebook - у вас есть мнение о нем?
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 23:32:26
Делаю питоновский курс от IBM, они все практику делают в Junyper Notebook - у вас есть мнение о нем?
Может всё-таки Jupyter? Если да, то хорошая штука, в нашей компании им пользуются, хотя сам мало в нём работал.
Если именно Junyper -- тогда подозреваю это в любом случае какой-то малоизвестный форк Jupyter-а.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 10 June 2023, 23:38:41
так я верю, но мне как хардкорному бейсикисту было дико. Тем более, что было в тесте на знание синтаксиса («найди неправильное выражение») и мне точно показалось, что за такое компьютер трасерами расстреливает ??? :-\

Вообще, тот факт, что строки можно умножать на числа - это просто курьёз. Его легко можно было бы добавить в какой угодно язык, просто где-то реализовать правило "умножение строки на число понимать как конкатенацию этой строки с самой собой". Интереснее, что, оказывается, оператор "звёздочка" работает с любым объектом, для которого определён "волшебный" метод __mul__. Который, естественно, можно определять по своему усмотрению. Например,
Code: [Select]
class C:

    def __init__(self, message):
        self.message = message

    def __mul__(self, k):
        if (k == 1):
            return self
        if (k == 2):
            return C(f'{self.message} bis')
        if (k == 3):
            return C(f'{self.message} ter')
        return C(f'{self.message} iterum atque iterum')

salve = C('salve')
print((salve * 1).message)
print((salve * 2).message)
print((salve * 3).message)
print((salve * 4).message)
печатает
Code: [Select]
salve
salve bis
salve ter
salve iterum atque iterum
Пока в это необязательно, наверно, вникать, особенно если вы до классов не добрались. Но для питона характерны такие "волшебные методы", которые сами вызывать не надо, но они делают доступной ту или иную функциональность.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 10 June 2023, 23:45:15
Да, извиняюсь, конечно Jupyter  :fp
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 23:47:52
Интереснее, что, оказывается, оператор "звёздочка" работает с любым объектом, для которого определён "волшебный" метод __mul__. Который, естественно, можно определять по своему усмотрению.
Это называется "перегрузка операторов" (operator overloading) и конечно она работает не только для умножения, а вообще для любых операторов, и не уникальна для Питона. Вот в C++ уже с самого начала приходится учить, что оператор << может быть перегружен (переопределён). В С++17 ещё перегружают / для работы с директориями: std::filesystem::path("C:\\")/"Program Files"/"My Program" -- это даже удобнее, чем питоновский os.path.join.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 10 June 2023, 23:52:21
С Jupyter-ом я немного работал, не фанат.

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

Ещё некоторые неудобства происходят из того, что по своей натуре питон не очень годится для интерактивной работы. Перезагружать определения индивидуально нельзя, только модуль целиком. Переопределить из ноутбука определение, данное в файле, нельзя.

Время от времени ядро ноутбука падало, приходилось перезапускать питон и восстанавливать определения.

Как текстовый файл ноутбук нечитаем, с гитом плохо сочетается.

Достоинства:
1. На безрыбье и рак рыба.
2. Можно картинки рисовать.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 10 June 2023, 23:53:43
В С++17 ещё перегружают / для работы с директориями: std::filesystem::path("C:\\")/"Program Files"/"My Program" -- это даже удобнее, чем питоновский os.path.join.

Кстати, у нас была настойчивая рекомендация использовать в питоне Path из pathlib, там такая же перегрузка слеша.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 10 June 2023, 23:59:22
Кстати, у нас была настойчивая рекомендация использовать в питоне Path из pathlib, там такая же перегрузка слеша.
О, вот это интересно, не знал о таком
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 00:02:26
С Jupyter-ом я немного работал, не фанат.

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

Ещё некоторые неудобства происходят из того, что по своей натуре питон не очень годится для интерактивной работы. Перезагружать определения индивидуально нельзя, только модуль целиком. Переопределить из ноутбука определение, данное в файле, нельзя.

Время от времени ядро ноутбука падало, приходилось перезапускать питон и восстанавливать определения.

Как текстовый файл ноутбук нечитаем, с гитом плохо сочетается.

Достоинства:
1. На безрыбье и рак рыба.
2. Можно картинки рисовать.
звучит как УГ, если честно  :'(
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 01:54:23
заметил, что значение переменной можно вывести просто написав ее имя, без функции принт. Это такая фича, так и задумано? В реальных программах тоже можно или это дурной тон так делать?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 01:59:51
Еще немного не понятна концепция "методов", чем они отличаются от функций. Или это просто игра словами?
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 02:06:22
заметил, что значение переменной можно вывести просто написав ее имя, без функции принт. Это такая фича, так и задумано?
В интерактивном интерпретаторе -- да, так и задумано, но в неинтерактивном режиме это не будет работать.
Еще немного не понятна концепция "методов", чем они отличаются от функций. Или это просто игра словами?
Методы у классов, а функции сами по себе.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 02:25:54
В интерактивном интерпретаторе -- да, так и задумано, но в неинтерактивном режиме это не будет работать.
спасибо, короче для отладки, но не надо привыкать  :yes:
Quote
Методы у классов, а функции сами по себе.
ну у меня пока были методы для стрингов, типа X.upper(), X.replace("Фигня", "Куйня") и т.д. - или это не методы?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 02:32:33
а амперсанд для конкатенации не поддерживается? странно как-то... ??? :-\
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 02:39:57
Code: [Select]
name = "Michael Jackson"
split_string = (name.split())
split_string

почему не name.split(" ")? ??? :-\
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 11 June 2023, 02:48:31
Quote from: Help
If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace. Consequently, splitting an empty string or a string consisting of just whitespace with a None separator returns [].

For example:
Code: [Select]
>>> '1 2 3'.split()
['1', '2', '3']
>>> '1 2 3'.split(maxsplit=1)
['1', '2 3']
>>> '   1   2   3   '.split()
['1', '2', '3']
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 02:50:38
ну у меня пока были методы для стрингов, типа X.upper(), X.replace("Фигня", "Куйня") и т.д. - или это не методы?
Строка -- это тоже класс
Code: [Select]
>>> type("test")
<class 'str'>
а амперсанд для конкатенации не поддерживается? странно как-то... ??? :-\
Да, это не Бейсик.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 02:55:44
Интересно, спасибо!
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 11 June 2023, 02:56:09
Строка -- это тоже класс
Да в общем-то в Питоне всё — класс. Почти как в Java.
У int и bytes тоже куча методов (которые, кстати, можно узнать функцией dir на любом экземпляре), не говоря уж о продвинутых list или dict.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 02:59:07
Code: [Select]
s1 = "Michael Jackson is the best"

# Define the pattern to search for
pattern = r"Jackson"

# Use the search() function to search for the pattern in the string
result = re.search(pattern, s1)

# Check if a match was found
if result:
    print("Match found!")
else:
    print("Match not found.")

2 вопроса:

1. зачем search, разве нельзя было тоже с find сделать? Например так:
Code: [Select]
s1 = "Michael Jackson is the best"

# Define the pattern to search for
pattern = "Jackson"

# Don't the search() function to search for the pattern in the string
result = s1.find(pattern)

# Check if a match was found
if result:
    print("Match found!")
else:
    print("Match not found.")

2. какая функция у r тут? потому что пока что этот r попадался перед стрингами со слешем, никак вообще не объясняли для чего он еще используется
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 11 June 2023, 03:03:22
Это префикс raw string, для обработки сочетаний символов as is.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 11 June 2023, 03:06:12
заметил, что значение переменной можно вывести просто написав ее имя, без функции принт. Это такая фича, так и задумано? В реальных программах тоже можно или это дурной тон так делать?

Интерактивный шелл, существующий в некоторых языках, называется REPL: Read-Evaluate-Print Loop. Интерпретатор берёт на себя ввод-вывод, а пользователь может сосредоточиться на логике вычисений. Поэтому в репле значение переменной печатается: это значение выражения, образованного из одной этой переменной. А если одинокая переменная стоит в скрипте, она не напечатается.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 03:07:21
Это префикс raw string, для обработки сочетаний символов as is.
r-строки отличаются тем, что там нет escape-последовательностей. В данном случае нет разницы между r-строкой и просто строкой. r-строки особенно хороши для написания регулярный выражений, иначе можно задолбаться считать обратные слеши.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 03:11:09
1. зачем search, разве нельзя было тоже с find сделать? Например так:
И да, в данном случае также нет разницы между re.search и find. Но потенциально у re.search возможности гораздо больше, чем у find.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 11 June 2023, 03:13:44
Еще немного не понятна концепция "методов", чем они отличаются от функций. Или это просто игра словами?

Ну, это стандартная терминология ООП: методы суть функции, приклеенные к объектам. Принципиальных концептуальных различий с функциями у них нет. Однако, foo(a) - это вызов вполне определённой функции с аргументом a, а a.foo() - это вызов метода foo, ассоциированного с объектом a, и с разными объектами могут быть ассоциированы разные методы foo.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 03:13:44
И да, в данном случае также нет разницы между re.search и find. Но потенциально у re.search возможности гораздо больше, чем у find.
т.е. в данном случае оно вообще не надо было, re.search нужна больше для поиска по маскам, я правильно понимаю?
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 11 June 2023, 03:14:32
а амперсанд для конкатенации не поддерживается? странно как-то... ??? :-\

Можно плюсом.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 11 June 2023, 03:15:36
Кстати, отсутствие разбиения строки пустой строкой, как в JS сделано, слегка вымораживает.
Понятно, что есть list(string), но ошибки-то зачем кидать?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 03:15:56
r-строки отличаются тем, что там нет escape-последовательностей. В данном случае нет разницы между r-строкой и просто строкой. r-строки особенно хороши для написания регулярный выражений, иначе можно задолбаться считать обратные слеши.
но мне понравилось что r фейлит в выражениях с "нечетным числом слешей на конце выражения", поэтому предлагают вот такое:
Quote
rpath2 = r'C:\Windows\system32' + '\\'
чисто ботаническое решение самосозданной проблемы  ;D
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 03:26:10
т.е. в данном случае оно вообще не надо было, re.search нужна больше для поиска по маскам, я правильно понимаю?
Да
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 03:32:50
но мне понравилось что r фейлит в выражениях с "нечетным числом слешей на конце выражения", поэтому предлагают вот такое:
Ну в общем да, в первую очередь он предназначен для регулярок(то, что вы назвали "маски"), а виндовые пути -- просто побочный эффект.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 11 June 2023, 04:10:48
1. зачем search, разве нельзя было тоже с find сделать?
Замечу, что к find можно задать тот же вопрос.
Это bad practice.
Quote from: str.find docs
Note The find() method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the in operator:

Code: [Select]
>>> 'Py' in 'Python'
True
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 12:10:03
Замечу, что к find можно задать тот же вопрос.
Это bad practice.
доверяю вам на слово, но я знаю/ комментирую только то, что мне показывают тов. от Ай-би-эм  :dunno: Оператор "ин" они не представляли (ещё), сделали только с re.search() и мне это показалось ненужным, именно для поиска того, что они искали.

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

Вопрос по маскам:
Code: [Select]
pattern = r"\d\d\d\d\d\d\d\d\d\d"  # Matches any ten consecutive digitsэто мне понятно, но что делать если у нас неизвестное число цифр? Вот мы ищем в произвольном тексте все целые числа, как тогда надо описать маску для поиска?

Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 12:13:21
возвращаясь к нашему Джексону:
Code: [Select]
s1 = "Michael Jackson is the best"

# Define the pattern to search for
pattern = r"Jackson"

# Use the search() function to search for the pattern in the string
result = re.search(pattern, s1)

А что этот re.search() вообще возвращает? X.find() возвращал индекс, а что сёрч делает? :dunno: Я его распечатал, мне яснее не стало:
Quote
<re.Match object; span=(8, 15), match='Jackson'>
это что такое вообще?

Я распечатал даже тип:
Quote
<class 're.Match'>
:o :o :o
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 12:17:26
Про границу слова при поиске:
Quote
\b   Matches the boundary between a word character and a non-word character   "cat" matches "\bcat\b" in "The cat sat on the mat"
\B   Matches any position that is not a word boundary   "cat" matches "\Bcat\B" in "category" but not in "The cat sat on the mat"

почему второе правильно? разве cat- в "category" не "\bcat\B"? или я не так понимаю и \b, \B только попарно работают?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 12:33:44
Хочется поплакать:
Code: [Select]
pattern = r"\d\d\d\d\d\d\d\d\d\d"  # Matches any ten consecutive digits
text = "My Phone number is 1234567890"
match = re.search(pattern, text)

if match:
    print("Phone number found:", match.group())
else:
    print("No match")

что такое X.group() и как оно работает тут?
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 11 June 2023, 13:24:16
Code: [Select]
pattern = r"\d\d\d\d\d\d\d\d\d\d"  # Matches any ten consecutive digitsэто мне понятно, но что делать если у нас неизвестное число цифр? Вот мы ищем в произвольном тексте все целые числа, как тогда надо описать маску для поиска?

Квантификатор * матчит любое число повторений (в том числе 0, то есть пустую строку); квантификатор + матчит одно или больше повторений. То есть найти группу из цифр можно выражением r'\d+'.

Кстати, в качестве квантификатора можно использовать число в фигурных скобких: r'\d{10}' - это r'\d\d...<десять раз>\d'.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 13:26:58
А что этот re.search() вообще возвращает?
Так как в re.search длина совпадения может быть разная и в маске можно скобками задать несколько подгрупп, он возвращает специальный объект из которого можно выковыривать как индексы подгрупп, так и их значения.
что такое X.group() и как оно работает тут?
А что непонятно? group() это метод класса re.Match, который возвращает либо совпавшую строку целиком (если нет параметра, или параметр нулевой), либо какую-то отдельную подгруппу, индекс которой задаётся в параметре.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 11 June 2023, 13:29:37
разве cat- в "category" не "\bcat\B"?
Именно так, там неправильно написано. Можно даже проверить экспериментально.

или я не так понимаю и \b, \B только попарно работают?
Не, независимо от всего прочего.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 13:38:16
И вот небольшой примерчик зачем вообще нужен класс re.Match
Code: [Select]
pattern = r"(\d+)-(\d+)"
text = "My Phone number is 123-456789"
match = re.search(pattern, text)

if match:
    print("Phone first part: ", match.group(1))
    print("Phone second part part: ", match.group(2))
else:
    print("No match")
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 13:44:29

Квантификатор * матчит любое число повторений (в том числе 0, то есть пустую строку); квантификатор + матчит одно или больше повторений. То есть найти группу из цифр можно выражением r'\d+'.
спасибо! буду надеяться, что они позже это расскажут  :)
Quote
Кстати, в качестве квантификатора можно использовать число в фигурных скобких: r'\d{10}' - это r'\d\d...<десять раз>\d'.
прикольно, еще не видел такого! :up:
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 13:46:08
А что непонятно? group() это метод класса re.match, который возвращает либо совпавшую строку целиком (если нет параметра, или параметр нулевой), либо какую-то отдельную подгруппу, индекс которой задаётся в параметре.
ничего непонятно, потому что этой групповухи нигде не было, и вдруг она выскакивает как черт из табакерки уже в практических (!) занятиях 8-)
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 13:49:49
И вот небольшой примерчик зачем вообще нужен класс re.Match
Code: [Select]
pattern = r"(\d+)-(\d+)"
text = "My Phone number is 123-456789"
match = re.search(pattern, text)

if match:
    print("Phone first part: ", match.group(1))
    print("Phone second part part: ", match.group(2))
else:
    print("No match")
Интересно, но непонятно, как считают элементы внутри объекта матч. Считаются только выражения, состоящие из масок, а тупые символы (вроде дефиса тут) игнорятся?
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 13:51:18
Начал туплы и списки - это типа расчленили бейсиковские массивы на 2 части? И у меня почему-то ощущение, что стринги - это частный случай тупла, или мне так только кажется?
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 13:53:20
Интересно, но непонятно, как считают элементы внутри объекта матч. Считаются только выражения, состоящие из масок, а тупые символы (вроде дефиса тут) игнорятся?
Считаются только выражения в скобках, остальные символы можно достать только из полного совпадения -- просто group().
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 13:56:59
И у меня почему-то ощущение, что стринги - это частный случай тупла, или мне так только кажется?
Не совсем. Туплы могут содержать разнотипичные данные, строки -- только символы.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 13:59:11
Считаются только выражения в скобках, остальные символы можно достать только из полного совпадения -- просто group().
спасибо, начал что-то понимать. Попробовал маску со скобками и без скобок, вроде яснее теперь, спасибо. Т.е. если нам нефатально отдельные части маски - то просто без скобок \d+-\d+ и выводим через result.group() - я правильно понял?
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 13:59:55
Т.е. если нам нефатально отдельные части маски - то просто без скобок \d+-\d+ и выводим через result.group() - я правильно понял?
Да
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 14:00:40
Не совсем. Туплы могут содержать разнотипичные данные, строки -- только символы.
ну так это и есть определение "частного случая". Стринги = особая категория туплов, которые могут содержать только символы :)
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 11 June 2023, 14:06:05
ну так это и есть определение "частного случая". Стринги = особая категория туплов, которые могут содержать только символы :)
Ещё отличие, что в стрингах функции count() и index() могут содержать подстроки, а для туплов они могут найти разве что вложенные туплы. Да и вообще они технически по-разному реализованы.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 11 June 2023, 14:08:55
ну так это и есть определение "частного случая". Стринги = особая категория туплов, которые могут содержать только символы :)

Ну, с помощью запятой (оператор тупла) строку не получится сделать. ('a', 'b') и 'ab' - разные вещи.

У туплов и строк в питоне есть важное сходство: они неизменяемы. А список можно менять: добавлять элементы, убирать, заменять. В принципе, питоновские списки - это массивы в стандартной терминологии CS.
Title: Re: Не менее глупые вопросы по Питону
Post by: Квас on 11 June 2023, 14:45:18
А ещё с туплами можно делать так:
Code: [Select]
pair = (1, 2)
x, y = pair
print(f'x: {x}, y: {y}')
печатает "x: 1, y: 2".
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 11 June 2023, 15:08:05
Самая впечатляющая вещь с ними: это обмен значениями.

Code: (Python) [Select]
x = 1
y = 2
x, y = y, x
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 11 June 2023, 15:41:59
А ещё с туплами можно делать так:
Code: [Select]
pair = (1, 2)
x, y = pair
print(f'x: {x}, y: {y}')
печатает "x: 1, y: 2".
а что f делает в принте?
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 11 June 2023, 16:37:27
Позволяет выводить значения переменных в фигурных скобках.
Это префикс formatted string literals.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 13 June 2023, 01:49:16
Code: [Select]
>>> round(4.5)
 4

 :o :aaa!
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 13 June 2023, 02:44:47
https://en.wikipedia.org/wiki/Rounding#Rounding_half_to_even
Quote from:
This is the default rounding mode used in IEEE 754 operations for results in binary floating-point formats, and the more sophisticated mode used when rounding to significant figures.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 18 June 2023, 15:33:40
Тема: проверка версии Питона на компьютере.

Почему из командной строчки py --version работает, а на python --version пишет "Python was not found". Какая тут логика?
Title: Re: Не менее глупые вопросы по Питону
Post by: Toman on 18 June 2023, 16:16:30
Тема: проверка версии Питона на компьютере.

Почему из командной строчки py --version работает, а на python --version пишет "Python was not found". Какая тут логика?
Скорее всего, просто то, как конкретно на вашей системе называется исполняемый файл интерпретатора Питона и/или его псевдонимы/линки.
Title: Re: Не менее глупые вопросы по Питону
Post by: Bhudh on 18 June 2023, 16:17:30
У меня не только работают обе, но ещё и показывают разные версии.
Потому, что py почему-то привязал к себе движок Panda3D (https://www.panda3d.org) :lol:.
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 18 June 2023, 17:10:51
Вариант с py вообще в первый раз вижу, у меня не работает.
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 18 June 2023, 17:42:40
Скорее всего, просто то, как конкретно на вашей системе называется исполняемый файл интерпретатора Питона и/или его псевдонимы/линки.
так я ж ничего лично не делал - просто скачал с python.org новейшую версию. У меня 3.11.4 емнип
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 18 June 2023, 17:44:37
у меня и файлы *.py командой py Fail_neim.py запускаются :dunno:
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 18 June 2023, 17:47:05
Как оказалось, этот вопрос совсем не глупый, а это даже крутая фича: https://stackoverflow.com/questions/50896496/what-is-the-difference-between-py-and-python-in-the-windows-terminal

 :o :o :o
Title: Re: Не менее глупые вопросы по Питону
Post by: Kurt on 18 June 2023, 20:00:15
так я ж ничего лично не делал - просто скачал с python.org новейшую версию. У меня 3.11.4 емнип
Насколько помню, надо писать python3
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 18 June 2023, 22:16:37
Насколько помню, надо писать python3
не поможет
Title: Re: Не менее глупые вопросы по Питону
Post by: Upliner on 19 June 2023, 03:20:01
Помогло бы в инсталляторе поставить галочку "Add python.exe to PATH"
Title: Re: Не менее глупые вопросы по Питону
Post by: Euskaldun on 19 June 2023, 08:23:38
Помогло бы в инсталляторе поставить галочку "Add python.exe to PATH"
сколько я понял из обсуждений в интернете, рекоммендация - использовать лончер py, за исключением каких-то очень специфических обстоятельств