Форум сайта python.su
Здравствуйте. Это снова я, махровый любитель “кодить” с трёх ночи. Очень интересное для меня хобби, но при этом довольно утомительное. Когда приходим в ресторан, то перед нами тарелка и приборы по бокам. В тарелку нам “положили” нечто такое, чего дома вряд ли встретишь. Главное, что съедобное. Для того, чтобы попробовать, нужны приборы. В случае с программированием любитель вроде меня часто полагается на интуитивную спонтанность в поисках правильного решения, иногда вообще методом тыка в пустоту. Это занимает очень много времени. Я использую VSCode но не имею нормальных приборов для быстрого освоения той или иной идеи. Не хватает упорядоченности в таком деле. Бывает, что решение оказывается очень простым, очень. Но на его поиски потрачено уйма времени. Поделитесь опытом, как вы строите своё изучение языка, каков алгоритм у вас сложился, который облегчает это занятие? Надеюсь, задал несложный вопрос.
Офлайн
VladejТы знаешь, филология в программировании до добра не доведёт. Там надо знать математику, а у филологов с этим туго, так как мышление другое.
Когда приходим в ресторан, то перед нами тарелка и приборы по бокам. В тарелку нам “положили” нечто такое, чего дома вряд ли встретишь. Главное, что съедобное. Для того, чтобы попробовать, нужны приборы.
VladejЭто же редактор кода просто.
Я использую VSCode но не имею нормальных приборов для быстрого освоения той или иной идеи.
VladejДа, ты просто берёшь глыбу и откалываешь от неё все лишние части от скульптуры, которая в ней прячется. Сколько нужно знать и уметь, чтобы это делать? Ну, нужно годами учиться, пока вся лишняя шелуха слезет.
Бывает, что решение оказывается очень простым, очень.
VladejПервые три года ты входишь в программирование только. Я имею в виду первые три года самообразования в этом направлении. В вузе бы из тебя выжали всё, как из лимона, очень интенсивно, тебя бы заставляли прорешивать сотни задач за месяцы, чтобы ты за полгода проходил сразу много материала, а при их откладывании тобой стимулировали бы тебя отчислением из вуза и социальной смертью, хотя она надумана, конечно, но для молодого такая байка сойдёт. Ещё, знаешь, неизвестно, кому повезло, тому дворнику, который просто метёт метлой с рассвета и до забора и получает свою зарплату периодически, или тому преподу, который весь такой умный, но ему даже покушать купить не на что, так как “деньги будут потом” и “работайте так, как будто деньги есть”. Так что вуз, конечно, - это хорошо, но и самообразование вне вуза много нервов бережёт и идёт в целом лучше и свободнее.
Поделитесь опытом, как вы строите своё изучение языка, каков алгоритм у вас сложился, который облегчает это занятие?
VladejНу, VSCode для этого маловато. VSCode - это часть необходимых компонентов. Придумать программу VSCode не поможет. Разработать план реализации программы VSCode тоже не поможет. Так что для этого тебе придётся читать книги от профессионалов и признанных личностей в деле программирования. И там уже смотреть, как они описывают разработку программы на примере. Смотри, кто что сделал за всю свою жизнь, и если человек хоть что-то создал, а потом и книгу написал для других, то эту книгу можно читать. Если же он просто болтун или же местечковый специалист, то лучше его проигнорировать, несмотря на регалии. Для изучения же самого языка нужно получить его исходную документацию, скачать её себе в компьютер и заниматься по ней, проходить её последовательно пункт за пунктом, прорешивая каждую часть. Примеров и задачек там нет обычно, но надо для запоминания конструкций каждую особенность записать в коде руками и посмотреть, как она работает. Так ты и выучишь постепенно то, с чем работаешь, и заодно проверишь свои расхождения в теоретических представлениях и практических результатах. Бывает так, что тебе кажется одно, а на практике проверяешь и оно оказывается другим. Теоретически ожидаешь там одну кодировку и уверен в этом, что она там и будет, потом проверяешь, а там оказывается другая кодировка и ты начинаешь это расследовать и приходишь к выводу, что там есть потайная настройка. Такие секреты на дороге не валяются, их надо добыть самому. Труда много в этом.
Поделитесь опытом, как вы строите своё изучение языка
Отредактировано py.user.next (Май 5, 2023 15:51:15)
Офлайн
py.user.nextну да, если уже всё знаешь, то это просто блокнот для редактирования кода.
Это же редактор кода просто
py.user.nextА вы, смотрю, тоже филолог ? Но только не в ресторане, а в руднике. Я такой же филолог, как и программист. Но хоть в филологии преуспел, спасибо, польстили. Вообще-то, насколько понимаю, данный язык относится к числу ООП. А это значит, что при первых шагах “филология” или что-то аналогичное востребовано. Или я не прав? Но это так, между прочим.
Да, ты просто берёшь глыбу и откалываешь
py.user.nextэто было интересно узнать. я хоть и нулевой уровень (в год ковида, когда сидели по домам, скомпилировал себе две программульки для личного пользования, сейчас пытаюсь написать третью), но мой “опыт” показывает, что то, что пытаешься создать, на самом деле проще, чем думаешь. Как будто заранее ищешь нечто сложное, а оно на деле неожиданно простое. Но это связано с недостатком информации, знал бы заранее, “написал” бы как правильно, не уходя в небеса. А вот чтобы знать, нужны какие-то допприборы под рукой, потому и тема про алгоритм действий.
Сейчас я об этом даже не думаю - ерунда……
py.user.nextвы меня извините, но наверное для этого и пришлось столько лет … , а у меня запросы простые, “крестьянские”. Хотя от вуза я бы не отказался, но с моим слухом мне там только орать придётся. Поэтому самоучимся. А вот что касается всё же Гаусса…? Это диск можно за минуту переформатировать. А человек - очень инертное природное образование, его переформатирование может занимать десятки лет, но если с курсами и активной практикой, то десять лет, и то результат не будет идеальным. Это так в любой отрасли.
нахождения корней в системе уравнений, включая…
py.user.nextименно так и начинал, сразу писать код и испытывать. А вот с приборами непонятно. Они вроде есть - документация, примеры с известных ресурсов (книги от профи… это вообще что такое? какое это имеет отношение к программированию? скорее всего это про личное, у меня нет времени читать книжки), но алгоритм всё равно не налаживается. Не сложилась за столько лет существования этой отрасли некая структура, даже расширения VSCode не компенсируют нехватку информации. Вообще считаю, что наличие такого количества расширений - это признак отсутствия некой выстроенной структуры, отчасти присутствует анархия, вот и разбирайся сам, если охота.
но надо для запоминания конструкций каждую особенность записать в коде руками и посмотреть, как она работает.
Офлайн
VladejЗайди просто сюда.
Они вроде есть - документация, примеры с известных ресурсов (книги от профи… это вообще что такое? какое это имеет отношение к программированию? скорее всего это про личное, у меня нет времени читать книжки), но алгоритм всё равно не налаживается.
VladejДа сложилось всё, просто ты не прочитал ни одной книжки. В них всё и написано - то, что ты тут спрашиваешь.
Не сложилась за столько лет существования этой отрасли некая структура
Офлайн
Я использую VSCode но не имею нормальных приборов для быстрого освоения той или иной идеи.У меня для тебя плохие новости.
Офлайн
ZerGочень здорово, “да здравствуй анархия - мать порядка”!
У меня для тебя плохие новости.
Ибо единственный инструмент программиста это его голова
Офлайн
Vladej
скомпилировал себе две программульки для личного пользования, сейчас пытаюсь написать третью
VladejПриведи пример этих программ. Посмотрим, что ты знал, что ты не знал и почему так получилось. Сам ты явно в каких-то дебрях плаваешь.
Как будто заранее ищешь нечто сложное, а оно на деле неожиданно простое. Но это связано с недостатком информации, знал бы заранее, “написал” бы как правильно, не уходя в небеса. А вот чтобы знать, нужны какие-то допприборы под рукой, потому и тема про алгоритм действий.
VladejА что такое ООП, ты же не знаешь. Ну, относится он к числу ООП-языков; ну, и о чём тебе это говорит?
Вообще-то, насколько понимаю, данный язык относится к числу ООП. А это значит, что при первых шагах “филология” или что-то аналогичное востребовано.
VladejНачни думать с программ. Вот есть разные программы сложные, которыми ты пользуешься каждый день: нажал на одну кнопку - она тебе выдала всё и даже больше. Кто их написал? Программисты. А как вот эти программисты, которые уже написали вот эти программы, стали программистами? Они учились либо в вузах, либо сами по книжкам, либо и в вузах и сами по книжкам. А как они учились в вузах, по какому алгоритму? А как они учились по книжкам, по какому алгоритму? Вот так они и научились. Когда сам учишься, то ты просто стараешься приблизить своё обучение к вузовскому, поэтому применяешь вузовский алгоритм, собирая его сам вручную.
И если процесс начинается с захламления головы, а потом процесс разбора хлама в течение десяти лет, то да - единственным инструментом остаётся голова, а не чёткий алгоритм.
Отредактировано py.user.next (Май 7, 2023 14:23:08)
Офлайн
не знаю как разговаривать с человеком, который зарегистрирован аж в 2010 году. У меня компьютер появился в 2006, а вы уже советы свои раздавали по “узкой” теме, “страна советов” называется. Ну и что мне с вами делать, next? Next - это ваше последнее имя? А первое какое? А может py.user.update(self.py(v2.0)) или вы всё про вузы с наполеонами будете рассказывать? Это не имеет никакого отношения к программированию. Ну коли спросили:
py.user.nextя уже состряпал третью программульку сегодня, всего 230 строк, скомпилировал в .exe. Как говорят индейцы: сегодня хороший день для смерти (надеюсь вы понимаете поговорку). Потратил времени - два-три часа свободного после работы времени почти каждый день в течение трёх месяцев. Вы мне и здесь будете про вузы с наполеонами рассказывать? Я сам слона проглочу, если понадобится. Как сама программа работает по чёткой инструкции, так и программирование следует чёткой инструкции, науки здесь как таковой нет, нужно просто знать ПДД - где можно направо, а где можно налево. В вузах же осваивается логика, выстраивается менталитет будущего программиста (вообще любого отраслевика, иначе на практике будет выглядеть… дворником в рясе). Почему я говорю, что решение часто бывает неожиданно простым? Потому что менталитет не подготовлен к логическим задачам, наш мозг - это анархия: как хочу, так и ворочу, поэтому всё простое для него является неожиданным и действенным. Ну вот, пожалуйста, один из последних моментов:
Приведи пример этих программ. Посмотрим, что ты знал, что ты не знал и почему так получилось
import pyautogui as pg .......... pos = pg.position() self.setGeometry(pos[0], pos[1]-50, 400, 200)
Офлайн
VladejА почему ты тогда этого не знал, а сейчас это знаешь? Наверное потому, что ты это проделал, проработал.
Я этого не знал, когда искал способ привязать к курсору.
VladejУ меня комп появился дома в 1993-м году. В Интернет я попал в 1998-м году. И то я за год до этого про Интернет читал книгу, я готовился к выходу в Интернет. Так что у меня основательный подход к этому. За компом я вырос и всегда хотел этим заниматься. Это не вынужденная какая-то хрень, как у тебя. Ты припёрся из-за бабок сюда, скорее всего, иначе бы ты тут был раньше. А те, кто из-за бабок приходят, они все поголовно ищут волшебную пилюлю, типа съел - и всё знаешь за секунду.
не знаю как разговаривать с человеком, который зарегистрирован аж в 2010 году. У меня компьютер появился в 2006
VladejЯ когда регистрировался тут, тут уже был py.user. В то время я уже знал язык C и писал на нём связные списки часто, поэтому мой ник означает, что я по-сишному взял узел py.user и сослался на указатель на следующий элемент в связном списке после него, который хранится прямо в этом же узле. То есть получилось, что на форуме есть два py.user'а одновременно в одном списке py.user'ов и один другому никак не мешает. Тебе, как непрограммисту, этого всего не понять. Пока ты с одним языком копошишься, со своим первым языком, мы уже знаем по несколько языков. И на твои бредни поэтому своё внимание даже не обращаем.
Ну и что мне с вами делать, next? Next - это ваше последнее имя? А первое какое? А может py.user.update(self.py(v2.0))
VladejЭто всё имеет отношение к программированию. Это ты просто не в теме и абсолютно левый человек в этой области.
Это не имеет никакого отношения к программированию.
Отредактировано py.user.next (Май 8, 2023 01:01:22)
Офлайн
py.user.nextЯ!? Мда-а… прочитал тут про себя … давненько в зеркало не смотрел. Это примерно так:
Ты припёрся из-за бабок сюда
import json import os import time import cv2 import keyboard import pyperclip import requests from PIL import Image, ImageGrab from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import QObject, QPoint, QRect, QRectF, Qt, pyqtSignal from PyQt5.QtGui import QColor, QIcon, QPainter, QPainterPath from PyQt5.QtWidgets import QAction, QApplication, QMenu, QSystemTrayIcon from pytesseract import pytesseract from Transler51 import Ui_MainWindow import pyautogui as pg URL = "https://translate.api.cloud.yandex.net/translate/v2/translate" KEY = "............" class KeyboardManager(QObject): pasteSignal = pyqtSignal() def start(self): keyboard.add_hotkey("f8", self._f8_callback) def _f8_callback(self): self.pasteSignal.emit() class Snip(QtWidgets.QMainWindow): closed = pyqtSignal() def __init__(self, parent=None): super(Snip, self).__init__(parent) self.setAttribute(Qt.WA_NoSystemBackground, True) self.setAttribute(Qt.WA_TranslucentBackground, True) self.setStyleSheet("background:transparent;") self.setWindowFlags(Qt.FramelessWindowHint) self.outsideSquareColor = "yellow" self.squareThickness = 2 self.start_point = QPoint() self.end_point = QPoint() def mousePressEvent(self, event): self.start_point = event.pos() self.end_point = event.pos() self.update() def mouseMoveEvent(self, event): self.end_point = event.pos() self.update() def mouseReleaseEvent(self, QMouseEvent): r = QRect(self.start_point, self.end_point).normalized() self.hide() img = ImageGrab.grab(bbox=r.getCoords()) img.save("D:\.......\testImage.png") QApplication.restoreOverrideCursor() self.closed.emit() self.start_point = QPoint() self.end_point = QPoint() def paintEvent(self, event): trans = QColor(22, 100, 233) r = QRectF(self.start_point, self.end_point).normalized() qp = QPainter(self) trans.setAlphaF(0.2) qp.setBrush(trans) outer = QPainterPath() outer.addRect(QRectF(self.rect())) inner = QPainterPath() inner.addRect(r) r_path = outer - inner qp.drawPath(r_path) qp.setPen( QtGui.QPen(QColor(self.outsideSquareColor), self.squareThickness) ) trans.setAlphaF(0) qp.setBrush(trans) qp.drawRect(r) class MainWindow(QtWidgets.QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.pushButton_3.clicked.connect(self.Flags) self.ui.pushButton_2.clicked.connect(self.copy_clipboard) self.ui.pushButton.clicked.connect(self.close) self.ui.textEdit.setStyleSheet("font: 10pt \"Tahoma\";\n" "background-color: rgb(66, 66, 66);\n" "color: rgb(255, 255, 255);") self.snipper = Snip() self.snipper.closed.connect(self.read) keyboard_manager = KeyboardManager(self) keyboard_manager.pasteSignal.connect(self.activateSnipping) keyboard_manager.start() self.createTrayIcon() icon = QIcon(r'D:\........\.png') self.trayIcon.setIcon(icon) self.trayIcon.show() self.trayIcon.showMessage( 'Привет', 'Используй F8\nred - CLOSE\nblue - COPY\ngreen - OnTop') def Flags(self): self.setWindowFlags(self.windowFlags() ^ QtCore.Qt.WindowStaysOnTopHint) self.show() def createTrayIcon(self): self.screenAction = QAction("&Screen", self, triggered=self.activateSnipping) self.screenAction.setShortcut('F8') self.quitAction = QAction("&Quit", self, triggered=QApplication.instance().quit) self.trayIconMenu = QMenu(self) self.trayIconMenu.addAction(self.screenAction) self.trayIconMenu.addSeparator() self.trayIconMenu.addAction(self.quitAction) self.trayIcon = QSystemTrayIcon(self) self.trayIcon.setContextMenu(self.trayIconMenu) def activateSnipping(self): self.snipper.showFullScreen() QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.CrossCursor) self.hide() def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.old_pos = event.pos() def mouseMoveEvent(self, event): if not self.old_pos: return delta = event.pos() - self.old_pos self.move(self.pos() + delta) def mouseReleaseEvent(self, event): if event.button() == Qt.LeftButton: self.old_pos = None def read(self): image = r'D:\........\.png' preprocess = "thresh" image = cv2.imread(image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) if preprocess == "blur": gray = cv2.medianBlur(gray, 3) elif preprocess == "thresh": gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] filename = "D:/....../Translate/{}.png".format(os.getpid()) cv2.imwrite(filename, gray) path_to_tesseract = r"C:\Program Files\Tesseract-OCR\tesseract.exe" pytesseract.tesseract_cmd = path_to_tesseract text = pytesseract.image_to_string(Image.open(filename)) os.remove(filename) with open(r"D:\...........\text.txt", "w") as file: file.write(text) file.close() self.translate(text) def translate(self, text): pos = pg.position() self.setGeometry(pos[0], pos[1]-50, 400, 200) headers = {"Content-Type": "application/json", "Authorization": "Api-Key " + KEY} params = { "texts": text, "sourceLanguageCode": 'en', "targetLanguageCode": 'ru' } response = requests.post(URL, headers=headers, data=json.dumps(params)) translations = response.json()['translations'] output = [] if len(translations) < 2: output = translations[0]['text'] self.ui.textEdit.setPlainText(output) self.show() else: for el in translations: output += [el['text']] return output def copy_clipboard(self, text): text = self.ui.textEdit.toPlainText() pyperclip.copy(text) time.sleep(3) pg.hotkey('ctrl', 'a') pg.hotkey('ctrl', 'c') return pyperclip.paste() if __name__ == '__main__': import sys app = QApplication(sys.argv) window = MainWindow() window.setStyleSheet("background-color: rgb(66, 66, 66);") window.setWindowFlags(QtCore.Qt.Window | Qt.CustomizeWindowHint) # window.show() sys.exit(app.exec_())
Отредактировано Vladej (Май 8, 2023 14:06:42)
Офлайн