Языковая политика
Общие обсуждения => Компьютеры и интернет => Topic started by: Euskaldun on 02 June 2023, 10:49:07
-
У вас есть рекомендации по простой, но удобной графической оболочке в которой можно поиграться с питоном? Я как представляю - два окна, одно с программой, другой с консолью вывода. Ну и там кнопки сохранить, открыть - больше особо ничего не надо. Просто как-то хотелось бы видеть программу перед глазами и результат, командная строка не нравится поэтому
-
у меня задумка : сделать прогрессивно усложняющуюся программу, добавляя в неё пошагово задачи - ну что было ясно мне самому что работает, а где уже косяк. Например, 1) создать массив с текстовой информацией (попуп для введения числа элементов, цикл по вводу данных, сохранение массива в ткст), 2) открыть уже существующий массив из ткст, считать данные (определить число элементов, цикл по считыванию), 3) функция по дополнению массива, по стиранию элементов 4) редактирование в стиле файнд-н-реплейс и т.д. вот что-то такое представляю, для поучиться - самое то, как думаете?
-
У вас есть рекомендации по простой, но удобной графической оболочке в которой можно поиграться с питоном? Я как представляю - два окна, одно с программой, другой с консолью вывода. Ну и там кнопки сохранить, открыть - больше особо ничего не надо. Просто как-то хотелось бы видеть программу перед глазами и результат, командная строка не нравится поэтому
Можно попробовать PyCharm, но он жирноват.
-
для поучиться - самое то, как думаете?
Вроде звучит неплохо. :up:
-
VSCode немного менее жирный.
-
а это даром всё или за $$$?
-
Конечно, даром, за кого вы нас принимаете? :) У PyCharm есть платная версия professional, но бесплатная вполне юзабельна, просто поменьше наворотов.
-
пишут, что чарм очень тормозит компьютер и много места занимает. может начать с попроще? вы же видите, что я буду програмки на уровне школоты писать ;D
-
Как по мне, как раз на начальном уровне очень важна такая вещь, как автодополнение. Скажем, набираешь "f=open(" -- и сразу показывается, какие параметры принимает функция open. Потом на следующей строчке набираешь "f." -- и сразу видно какие методы есть у объекта "f". В PyCharm всё это скорее всего будет из коробки, в vscode нужно будет ещё поставить питоновский Extension, да и вообще там настройка более сложная для непрограммиста.
-
Попробуйте, вдруг нормально будет работать, можно же снести. Жрёт много памяти - ради удобства пользователя!
VS Code тоже должно быть нормально. Я не писал в нём на питоне, сейчас создал файл - он сам предложил расширение поставить. Скрипт внутри него тоже запускается.
-
почитал синтаксис - какая радость, особенно обрадовали string[-1],… - помню как надо было через задницу с LEN делать в бейсике :yes:
-
А что Вы называете консолью, чёрное окошечко с построчным вводом или стандартный IDLE?
-
А что Вы называете консолью, чёрное окошечко с построчным вводом или стандартный IDLE?
просто окно результата, где видно что программа делает
-
досовский промпт не хочу так как неудобно вносить изменения в уже написанное, потому лучше 2 окна: в одном программа, во втором аутпут
-
Ну, для этого IDE собственно не нужна, нужен просто достаточно функциональный шелл, скажем Konsole так умеет.
-
А что Вы называете консолью, чёрное окошечко с построчным вводом или стандартный IDLE?
просто окно результата, где видно что программа делает
Если в IDLE открыть новый файл, он не будет консолью, он будет обычным текстовым файлом с кодом программы.
И её можно будет запустить и выводить из неё в консоль что захотите.
-
Вот примеры работы в двух окошечках (код+консоль) и трёх (код+консоль+графический вывод).
(http://puu.sh/JIczf.png)
(http://puu.sh/JIczt.png)
-
Аплайнер - во, я именно что-то такое и представлял. И мне автоисправления и автодебаггинг не нужны, наоборот, все ошибки желательно находить и исправлять самому - так лучше обучение пройдет
-
В винде тоже уже сделали новый терминал, где можно разделять окна:
https://learn.microsoft.com/en-us/windows/terminal/panes
В качестве текстового редактора можно использовать Far
-
Кстати, чтобы иметь два окна, можно на худой конец открыть независимо друг от друга два окна: (абсолютно любой) редактор и терминал.
-
Кстати, чтобы иметь два окна, можно на худой конец открыть независимо друг от друга два окна: (абсолютно любой) редактор и терминал.
да, но как не хотелось бы копи-пастить туда обратно
-
да, но как не хотелось бы копи-пастить туда обратно
Не понял, что там копи-пастить?
-
Не понял, что там копи-пастить?
а как программа перенесется в терминал из редактора? телепортацией? :)
-
да, но как не хотелось бы копи-пастить туда обратно
Не, не копипастить, просто запускать файл. В редакторе редактируем файл hello.py, в терминале (в той же директории) запускаем python hello.py.
-
типа его сейвом, а во втором окне запускать?
-
типа его сейвом, а во втором окне запускать?
Ага, именно так.
-
ну тоже вариант, а вот как у паскаля нет? два окошка, в одном программа, нажал кнопку - во втором аутпут :)
-
Мои скрины вообще никто не видит, что ли?
-
Мои скрины вообще никто не видит, что ли?
Я вижу!
Вот, кстати, нагуглилась похожая штука, но в одном окошке: и редактор, и терминал https://thonny.org/ Суперминималистичная!
-
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
А чё это он мне рекомендует то, что мне не подходит?
-
А чё это он мне рекомендует то, что мне не подходит?
Система рекомендаций сломалась от вашей древности.
-
Остановился на Тhonny, самое то, как раз как представлял, спасибо за наводку! :up:
Начал играться с конвертацией переменных и вот такой вопрос:
# Assignment
pi = 3.14159
# checking the type
print(type(pi))
# conversion& printing
pi_int = bool(pi)
print(pi_int)
почему ответ True? ??? :-\ Что именно питон делает при конвертации не 0/1 в булевые переменные?
-
А это?
>>> bool("Путин мудак")
True
Я конечно не против, но хотелось бы сочные детали ;D
-
"Ложные" значения превращаются в False, остальные - в True. "Ложных" значений много: 0, None, пустые строка/список/словарь/тупл, а также, оказывается, можно определять кастомные (я не знал): https://docs.python.org/3/library/stdtypes.html#truth-value-testing Имхо, сомнительный дизайн, но что есть, то есть.
-
спасибо! т.е. упрощая False для чисел это нули, а для стрингов - пустые? разумно, уже представляю как с помощью bool() можно экономить некоторые логические тесты
-
спасибо! т.е. упрощая False для чисел это нули, а для стрингов - пустые? разумно, уже представляю как с помощью bool() можно экономить некоторые логические тесты
Ага. Экономить можно и без применения bool, потому что в тест может идти любое значение, не только True/False. Например, если s - строка:
if s:
print('Первая литера:', s[0])
else:
print('Пустая строка')
-
Квасе, опередили :).
Автоматическое приведение типов — сила. Силы которой си/плюсы не знают :lol:.
-
Силы которой си/плюсы не знают :lol:.
Что за бред? В сях тоже можно в if числа совать. А в C++ можно вообще как угодно переопределять конверсию типов, не хуже, чем в Питоне. А вот такая конверсия как в JS типа "1" + 2 -- зло.
-
Переопределять и в Питоне можно. А мы про ситуацию из коробочки.
В случае со строками в JS всё более-менее логично: со строкой может конкатенировать только строка, потому следующие после строки операнды и приводятся к строке.
А что там до — это уже порядок исполнения.
Каковой порядок и для приведения есть.
-
Ага. Экономить можно и без применения bool, потому что в тест может идти любое значение, не только True/False. Например, если s - строка:
if s:
print('Первая литера:', s[0])
else:
print('Пустая строка')
а если s случайно флоутом окажется, то что сделает s[0]? вернет первую цифру?
-
. А вот такая конверсия как в JS типа "1" + 2 -- зло.
я сегодня долго смотрел на print(“hey “ * 2), и не мог поверить, что такое работает
-
Переопределять и в Питоне можно. А мы про ситуацию из коробочки.
В Питоне сначала привыкаешь что угодно совать в if, а потом суёшь numpy.ndarray и получаешь по рукам в рантайме, а потом выискиваешь по всему проекту, где ещё могло быть такое. И не помню, ловит ли pylint такие ошибки, ну и понятно, что он в принципе может такое словить только если есть аннотации типов.
-
а если s случайно флоутом окажется, то что сделает s[0]? вернет первую цифру?
Ошибку выдаст
-
В Питоне сначала привыкаешь что угодно совать в if, а потом суёшь numpy.ndarray и получаешь по рукам в рантайме
Ну вот за такое точно надо бить по рукам писателей numpy, а не писателей Python.
А зачем, интересно, массив в if совать? Такое и в JS может интересным боком вылезти.
-
я сегодня долго смотрел на print(“hey “ * 2), и не мог поверить, что такое работает
Это не баг, это фича.
Тот, кто только BASIC знает, может, тоже на лямбды круглыми глазами смотрит и не может поверить.
-
А зачем, интересно, массив в if совать? Такое и в JS может интересным боком вылезти.
Затем же, зачем и для C++-ного вектора хочется, чтобы if (a) был эквивалентен if (!a.empty())
А так в C/C++ имплицитное приведение к bool для чисел и указателей (в том числе умных), этого уже достаточно, чтобы утверждать, что там тоже есть эта сила.
-
А зачем, интересно, массив в if совать? Такое и в JS может интересным боком вылезти.
Затем же, зачем и для C++-ного вектора хочется, чтобы if (a) был эквивалентен if (!a.empty())
Хм. А если a пустой?
Насчёт массива в JS я, правда, немного ошибся, любой объект (https://learn.javascript.ru/object-toprimitive) приводится к true. А вот если сначала приведётся к строке, может случиться ой.
-
Хм. А если a пустой?
Так именно это же и проверяем
-
А-а, ступил. Хотя не помешало бы логическому методу иметь название типа isEmpty.
-
Это не баг, это фича.
Тот, кто только BASIC знает, может, тоже на лямбды круглыми глазами смотрит и не может поверить.
так я верю, но мне как хардкорному бейсикисту было дико. Тем более, что было в тесте на знание синтаксиса («найди неправильное выражение») и мне точно показалось, что за такое компьютер трасерами расстреливает ??? :-\
-
Делаю питоновский курс от IBM, они все практику делают в Junyper Notebook - у вас есть мнение о нем?
-
Делаю питоновский курс от IBM, они все практику делают в Junyper Notebook - у вас есть мнение о нем?
Может всё-таки Jupyter? Если да, то хорошая штука, в нашей компании им пользуются, хотя сам мало в нём работал.
Если именно Junyper -- тогда подозреваю это в любом случае какой-то малоизвестный форк Jupyter-а.
-
так я верю, но мне как хардкорному бейсикисту было дико. Тем более, что было в тесте на знание синтаксиса («найди неправильное выражение») и мне точно показалось, что за такое компьютер трасерами расстреливает ??? :-\
Вообще, тот факт, что строки можно умножать на числа - это просто курьёз. Его легко можно было бы добавить в какой угодно язык, просто где-то реализовать правило "умножение строки на число понимать как конкатенацию этой строки с самой собой". Интереснее, что, оказывается, оператор "звёздочка" работает с любым объектом, для которого определён "волшебный" метод __mul__. Который, естественно, можно определять по своему усмотрению. Например,
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)
печатает
salve
salve bis
salve ter
salve iterum atque iterum
Пока в это необязательно, наверно, вникать, особенно если вы до классов не добрались. Но для питона характерны такие "волшебные методы", которые сами вызывать не надо, но они делают доступной ту или иную функциональность.
-
Да, извиняюсь, конечно Jupyter :fp
-
Интереснее, что, оказывается, оператор "звёздочка" работает с любым объектом, для которого определён "волшебный" метод __mul__. Который, естественно, можно определять по своему усмотрению.
Это называется "перегрузка операторов" (operator overloading) и конечно она работает не только для умножения, а вообще для любых операторов, и не уникальна для Питона. Вот в C++ уже с самого начала приходится учить, что оператор << может быть перегружен (переопределён). В С++17 ещё перегружают / для работы с директориями: std::filesystem::path("C:\\")/"Program Files"/"My Program" -- это даже удобнее, чем питоновский os.path.join.
-
С Jupyter-ом я немного работал, не фанат.
Главный недостаток - написанное в ноутбуке трудно переиспользовать. Только открыть этот самый ноутбук, щёлкнуть это самое определение, и оно будет доступно в этом ноутбуке и больше нигде. Поэтому для себя я сформулировал такое правило: сколько-нибудь серьёзный код писать в файле и загружать этот файл в ноутбук для интерактивных экспериментов.
Ещё некоторые неудобства происходят из того, что по своей натуре питон не очень годится для интерактивной работы. Перезагружать определения индивидуально нельзя, только модуль целиком. Переопределить из ноутбука определение, данное в файле, нельзя.
Время от времени ядро ноутбука падало, приходилось перезапускать питон и восстанавливать определения.
Как текстовый файл ноутбук нечитаем, с гитом плохо сочетается.
Достоинства:
1. На безрыбье и рак рыба.
2. Можно картинки рисовать.
-
В С++17 ещё перегружают / для работы с директориями: std::filesystem::path("C:\\")/"Program Files"/"My Program" -- это даже удобнее, чем питоновский os.path.join.
Кстати, у нас была настойчивая рекомендация использовать в питоне Path из pathlib, там такая же перегрузка слеша.
-
Кстати, у нас была настойчивая рекомендация использовать в питоне Path из pathlib, там такая же перегрузка слеша.
О, вот это интересно, не знал о таком
-
С Jupyter-ом я немного работал, не фанат.
Главный недостаток - написанное в ноутбуке трудно переиспользовать. Только открыть этот самый ноутбук, щёлкнуть это самое определение, и оно будет доступно в этом ноутбуке и больше нигде. Поэтому для себя я сформулировал такое правило: сколько-нибудь серьёзный код писать в файле и загружать этот файл в ноутбук для интерактивных экспериментов.
Ещё некоторые неудобства происходят из того, что по своей натуре питон не очень годится для интерактивной работы. Перезагружать определения индивидуально нельзя, только модуль целиком. Переопределить из ноутбука определение, данное в файле, нельзя.
Время от времени ядро ноутбука падало, приходилось перезапускать питон и восстанавливать определения.
Как текстовый файл ноутбук нечитаем, с гитом плохо сочетается.
Достоинства:
1. На безрыбье и рак рыба.
2. Можно картинки рисовать.
звучит как УГ, если честно :'(
-
заметил, что значение переменной можно вывести просто написав ее имя, без функции принт. Это такая фича, так и задумано? В реальных программах тоже можно или это дурной тон так делать?
-
Еще немного не понятна концепция "методов", чем они отличаются от функций. Или это просто игра словами?
-
заметил, что значение переменной можно вывести просто написав ее имя, без функции принт. Это такая фича, так и задумано?
В интерактивном интерпретаторе -- да, так и задумано, но в неинтерактивном режиме это не будет работать.Еще немного не понятна концепция "методов", чем они отличаются от функций. Или это просто игра словами?
Методы у классов, а функции сами по себе.
-
В интерактивном интерпретаторе -- да, так и задумано, но в неинтерактивном режиме это не будет работать.
спасибо, короче для отладки, но не надо привыкать :yes:
Методы у классов, а функции сами по себе.
ну у меня пока были методы для стрингов, типа X.upper(), X.replace("Фигня", "Куйня") и т.д. - или это не методы?
-
а амперсанд для конкатенации не поддерживается? странно как-то... ??? :-\
-
name = "Michael Jackson"
split_string = (name.split())
split_string
почему не name.split(" ")? ??? :-\
-
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:
>>> '1 2 3'.split()
['1', '2', '3']
>>> '1 2 3'.split(maxsplit=1)
['1', '2 3']
>>> ' 1 2 3 '.split()
['1', '2', '3']
-
ну у меня пока были методы для стрингов, типа X.upper(), X.replace("Фигня", "Куйня") и т.д. - или это не методы?
Строка -- это тоже класс
>>> type("test")
<class 'str'>
а амперсанд для конкатенации не поддерживается? странно как-то... ??? :-\
Да, это не Бейсик.
-
Интересно, спасибо!
-
Строка -- это тоже класс
Да в общем-то в Питоне всё — класс. Почти как в Java.
У int и bytes тоже куча методов (которые, кстати, можно узнать функцией dir на любом экземпляре), не говоря уж о продвинутых list или dict.
-
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 сделать? Например так:
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 попадался перед стрингами со слешем, никак вообще не объясняли для чего он еще используется
-
Это префикс raw string, для обработки сочетаний символов as is.
-
заметил, что значение переменной можно вывести просто написав ее имя, без функции принт. Это такая фича, так и задумано? В реальных программах тоже можно или это дурной тон так делать?
Интерактивный шелл, существующий в некоторых языках, называется REPL: Read-Evaluate-Print Loop. Интерпретатор берёт на себя ввод-вывод, а пользователь может сосредоточиться на логике вычисений. Поэтому в репле значение переменной печатается: это значение выражения, образованного из одной этой переменной. А если одинокая переменная стоит в скрипте, она не напечатается.
-
Это префикс raw string, для обработки сочетаний символов as is.
r-строки отличаются тем, что там нет escape-последовательностей. В данном случае нет разницы между r-строкой и просто строкой. r-строки особенно хороши для написания регулярный выражений, иначе можно задолбаться считать обратные слеши.
-
1. зачем search, разве нельзя было тоже с find сделать? Например так:
И да, в данном случае также нет разницы между re.search и find. Но потенциально у re.search возможности гораздо больше, чем у find.
-
Еще немного не понятна концепция "методов", чем они отличаются от функций. Или это просто игра словами?
Ну, это стандартная терминология ООП: методы суть функции, приклеенные к объектам. Принципиальных концептуальных различий с функциями у них нет. Однако, foo(a) - это вызов вполне определённой функции с аргументом a, а a.foo() - это вызов метода foo, ассоциированного с объектом a, и с разными объектами могут быть ассоциированы разные методы foo.
-
И да, в данном случае также нет разницы между re.search и find. Но потенциально у re.search возможности гораздо больше, чем у find.
т.е. в данном случае оно вообще не надо было, re.search нужна больше для поиска по маскам, я правильно понимаю?
-
а амперсанд для конкатенации не поддерживается? странно как-то... ??? :-\
Можно плюсом.
-
Кстати, отсутствие разбиения строки пустой строкой, как в JS сделано, слегка вымораживает.
Понятно, что есть list(string), но ошибки-то зачем кидать?
-
r-строки отличаются тем, что там нет escape-последовательностей. В данном случае нет разницы между r-строкой и просто строкой. r-строки особенно хороши для написания регулярный выражений, иначе можно задолбаться считать обратные слеши.
но мне понравилось что r фейлит в выражениях с "нечетным числом слешей на конце выражения", поэтому предлагают вот такое:
rpath2 = r'C:\Windows\system32' + '\\'
чисто ботаническое решение самосозданной проблемы ;D
-
т.е. в данном случае оно вообще не надо было, re.search нужна больше для поиска по маскам, я правильно понимаю?
Да
-
но мне понравилось что r фейлит в выражениях с "нечетным числом слешей на конце выражения", поэтому предлагают вот такое:
Ну в общем да, в первую очередь он предназначен для регулярок(то, что вы назвали "маски"), а виндовые пути -- просто побочный эффект.
-
1. зачем search, разве нельзя было тоже с find сделать?
Замечу, что к find можно задать тот же вопрос.
Это bad practice.
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:
>>> 'Py' in 'Python'
True
-
Замечу, что к find можно задать тот же вопрос.
Это bad practice.
доверяю вам на слово, но я знаю/ комментирую только то, что мне показывают тов. от Ай-би-эм :dunno: Оператор "ин" они не представляли (ещё), сделали только с re.search() и мне это показалось ненужным, именно для поиска того, что они искали.
Вообще педагогически материал подается очень плохо, в практической части, в лаборатории постоянно выскакивают какие-то вещи, которых не было в теоретической, поэтому у меня столько вопросов.
Вопрос по маскам:
pattern = r"\d\d\d\d\d\d\d\d\d\d" # Matches any ten consecutive digits
это мне понятно, но что делать если у нас неизвестное число цифр? Вот мы ищем в произвольном тексте все целые числа, как тогда надо описать маску для поиска?
-
возвращаясь к нашему Джексону:
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: Я его распечатал, мне яснее не стало:
<re.Match object; span=(8, 15), match='Jackson'>
это что такое вообще?
Я распечатал даже тип:
<class 're.Match'>
:o :o :o
-
Про границу слова при поиске:
\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 только попарно работают?
-
Хочется поплакать:
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() и как оно работает тут?
-
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'.
-
А что этот re.search() вообще возвращает?
Так как в re.search длина совпадения может быть разная и в маске можно скобками задать несколько подгрупп, он возвращает специальный объект из которого можно выковыривать как индексы подгрупп, так и их значения.что такое X.group() и как оно работает тут?
А что непонятно? group() это метод класса re.Match, который возвращает либо совпавшую строку целиком (если нет параметра, или параметр нулевой), либо какую-то отдельную подгруппу, индекс которой задаётся в параметре.
-
разве cat- в "category" не "\bcat\B"?
Именно так, там неправильно написано. Можно даже проверить экспериментально.
или я не так понимаю и \b, \B только попарно работают?
Не, независимо от всего прочего.
-
И вот небольшой примерчик зачем вообще нужен класс re.Match
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")
-
Квантификатор * матчит любое число повторений (в том числе 0, то есть пустую строку); квантификатор + матчит одно или больше повторений. То есть найти группу из цифр можно выражением r'\d+'.
спасибо! буду надеяться, что они позже это расскажут :)
Кстати, в качестве квантификатора можно использовать число в фигурных скобких: r'\d{10}' - это r'\d\d...<десять раз>\d'.
прикольно, еще не видел такого! :up:
-
А что непонятно? group() это метод класса re.match, который возвращает либо совпавшую строку целиком (если нет параметра, или параметр нулевой), либо какую-то отдельную подгруппу, индекс которой задаётся в параметре.
ничего непонятно, потому что этой групповухи нигде не было, и вдруг она выскакивает как черт из табакерки уже в практических (!) занятиях 8-)
-
И вот небольшой примерчик зачем вообще нужен класс re.Match
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")
Интересно, но непонятно, как считают элементы внутри объекта матч. Считаются только выражения, состоящие из масок, а тупые символы (вроде дефиса тут) игнорятся?
-
Начал туплы и списки - это типа расчленили бейсиковские массивы на 2 части? И у меня почему-то ощущение, что стринги - это частный случай тупла, или мне так только кажется?
-
Интересно, но непонятно, как считают элементы внутри объекта матч. Считаются только выражения, состоящие из масок, а тупые символы (вроде дефиса тут) игнорятся?
Считаются только выражения в скобках, остальные символы можно достать только из полного совпадения -- просто group().
-
И у меня почему-то ощущение, что стринги - это частный случай тупла, или мне так только кажется?
Не совсем. Туплы могут содержать разнотипичные данные, строки -- только символы.
-
Считаются только выражения в скобках, остальные символы можно достать только из полного совпадения -- просто group().
спасибо, начал что-то понимать. Попробовал маску со скобками и без скобок, вроде яснее теперь, спасибо. Т.е. если нам нефатально отдельные части маски - то просто без скобок \d+-\d+ и выводим через result.group() - я правильно понял?
-
Т.е. если нам нефатально отдельные части маски - то просто без скобок \d+-\d+ и выводим через result.group() - я правильно понял?
Да
-
Не совсем. Туплы могут содержать разнотипичные данные, строки -- только символы.
ну так это и есть определение "частного случая". Стринги = особая категория туплов, которые могут содержать только символы :)
-
ну так это и есть определение "частного случая". Стринги = особая категория туплов, которые могут содержать только символы :)
Ещё отличие, что в стрингах функции count() и index() могут содержать подстроки, а для туплов они могут найти разве что вложенные туплы. Да и вообще они технически по-разному реализованы.
-
ну так это и есть определение "частного случая". Стринги = особая категория туплов, которые могут содержать только символы :)
Ну, с помощью запятой (оператор тупла) строку не получится сделать. ('a', 'b') и 'ab' - разные вещи.
У туплов и строк в питоне есть важное сходство: они неизменяемы. А список можно менять: добавлять элементы, убирать, заменять. В принципе, питоновские списки - это массивы в стандартной терминологии CS.
-
А ещё с туплами можно делать так:
pair = (1, 2)
x, y = pair
print(f'x: {x}, y: {y}')
печатает "x: 1, y: 2".
-
Самая впечатляющая вещь с ними: это обмен значениями.
x = 1
y = 2
x, y = y, x
-
А ещё с туплами можно делать так:
pair = (1, 2)
x, y = pair
print(f'x: {x}, y: {y}')
печатает "x: 1, y: 2".
а что f делает в принте?
-
Позволяет выводить значения переменных в фигурных скобках.
Это префикс formatted string literals.
-
>>> round(4.5)
4
:o :aaa!
-
https://en.wikipedia.org/wiki/Rounding#Rounding_half_to_even
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.
-
Тема: проверка версии Питона на компьютере.
Почему из командной строчки py --version работает, а на python --version пишет "Python was not found". Какая тут логика?
-
Тема: проверка версии Питона на компьютере.
Почему из командной строчки py --version работает, а на python --version пишет "Python was not found". Какая тут логика?
Скорее всего, просто то, как конкретно на вашей системе называется исполняемый файл интерпретатора Питона и/или его псевдонимы/линки.
-
У меня не только работают обе, но ещё и показывают разные версии.
Потому, что py почему-то привязал к себе движок Panda3D (https://www.panda3d.org) :lol:.
-
Вариант с py вообще в первый раз вижу, у меня не работает.
-
Скорее всего, просто то, как конкретно на вашей системе называется исполняемый файл интерпретатора Питона и/или его псевдонимы/линки.
так я ж ничего лично не делал - просто скачал с python.org новейшую версию. У меня 3.11.4 емнип
-
у меня и файлы *.py командой py Fail_neim.py запускаются :dunno:
-
Как оказалось, этот вопрос совсем не глупый, а это даже крутая фича: https://stackoverflow.com/questions/50896496/what-is-the-difference-between-py-and-python-in-the-windows-terminal
:o :o :o
-
так я ж ничего лично не делал - просто скачал с python.org новейшую версию. У меня 3.11.4 емнип
Насколько помню, надо писать python3
-
Насколько помню, надо писать python3
не поможет
-
Помогло бы в инсталляторе поставить галочку "Add python.exe to PATH"
-
Помогло бы в инсталляторе поставить галочку "Add python.exe to PATH"
сколько я понял из обсуждений в интернете, рекоммендация - использовать лончер py, за исключением каких-то очень специфических обстоятельств