Как сделать опрос на python
В основном это опрос, и каждый раз, когда кто-то вводит что-то, он добавляет его в список. Затем, когда кто-то говорит "quit", он подсчитывает предметы и говорит что-то другое в зависимости от того, сколько раз произошло пятно каникул. Если это происходит несколько раз, я имел другие дубликаты удаляются после того, как они были подсчитаны с использованием while цикл. Но когда он удаляет дубликаты, весь список сдвигается, и индексное место перемещается вперед, тем самым пропуская пятно. Например:
После подсчета, как будут удалены, а положение индекс будет двигаться вперед: a
Как я могу сделать так, чтобы позиция индекса оставалась в одном и том же месте во время смены списка?
Если я смогу это сделать, тогда у меня может быть моя программа удалять дубликаты и синглы после того, как будет подсчитано письмо.
Вам не нужно удалять записи places . Это только затрудняет отслеживание. См. Следующий пример. Я немного структурировал ваш код:
Нет ли у кого мыслей на эту тему?
Нельзя ничего определенно сказать, что у тебя не так. Первая мысль: включено аппаратное управление потоком (hardware flow control). Возможно, что interceptty его отключает. Вот ничего пока с ходу не могу другого сказать. Отключи явно настройках порта или еще попробуй отключить stty -F /dev/ttyUSB0 -crtscts (надеюсь питоновская библиотека сама потом не включит).
Zubok ★★★★★ ( 02.11.21 23:45:47 )
Последнее исправление: Zubok 02.11.21 23:46:21 (всего исправлений: 1)
[code=Python] import serial
import modbus_tk import modbus_tk.defines as cst from modbus_tk import modbus_rtu
2021-11-02 23:57:07,153 INFO modbus_rtu.init MainThread RtuMaster /dev/ttyUSB0 is opened 2021-11-02 23:57:07,153 INFO modTK.main MainThread connected 2021-11-02 23:57:07,153 DEBUG modbus.execute MainThread -> 1-3-0-0-0-10-197-205 2021-11-02 23:57:12,155 DEBUG modbus.execute MainThread ( 03.11.21 00:09:20 )
serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0)
И вот это добавь. rtscts=False
К сожалению не завелось, пробыва на двух скриптах с разными библиотеками. вот настройки после после отработки скрипта
Вот это тоже все отключи. Возможно, там в serial питоновском есть на это параметры. Или попробуй через stty -echo -echoe -echok -crtscts.
он тебе человеческим голосом говорит же, все включено, данных нет. попробуй подождать подольше, это ж модбас
Побывал по-разному настраивать порт (stty -echo -echoe -echok -crtscts) Ради интереса попробовал на виндовсе - точно такой же результат (всякие опрашивалки типа qmodbus замечательно работают). Побывал устанавливать разные значения таймаутов, как в настройках порта, так и в запросах.
Побывал втыкать в разные места кода задержку sleep.. Такой же отрицательный результат.. Похоже что то я всё таки делаю не так. или у меня карма плохая.. Наверное пока как костыль буду подключаться через interceptty, потом возможно придёт озарение.. или попробую на другом каком языке реализовать вот это.
Чего-то ты как-то быстро сдаешься. А разобраться не хочешь? Если у тебя через interceptty работает, то с библиотекой все нормально. Ты как запускаешь interceptty?
Не знаю, что это, но предполагаю, что получил какой-то мусор, потому что Response length is invalid 0 (нулевой размер ответа в ответе). Получает мусор. Это может быть из-за неправильных настроек порта.
Zubok ★★★★★ ( 03.11.21 11:12:39 )
Последнее исправление: Zubok 03.11.21 11:19:43 (всего исправлений: 2)
спасибо за сопереживание ), запускал вот так:
В общем запустил на питоне с библиотекой modbus_tk. Нарыл в сети вот такой код и он работает.. Всем спасибо, буду разбирать что тут и как.
Ты вообще решил здравый смысл убить что ли? Идиотизм в квадрате же: модбас + пытхон! Жееесть.
возможно.. ваши предложения, исходные данные: я не программер и языков не знаю; надо быстро и желательно кросплатформенно; готового консольного решения я не нашёл…
interceptty -s 'ispeed 9600 ospeed 9600' /dev/ttyUSB0 /tmp/ttyS0
Вот эти параметры, которые после -s, он передает в stty напрямую. А вот fd /tmp/ttyS0 он создает с группой параметров raw
Смотри. У intercetty терминология такая: backend - это /dev/ttyUSB0, а frontend - это ttyS0. Не путаю? При инициализации backend interceptty пытается поставить его в raw. Показываю:
Что мы видим по коду? сначала interceptty переводит устройство в режим raw, а потом передает в него параметры, которые ты указал после '-s'. Полагаю, что PySerial этого не делает, но надо покопаться и посмотреть, как это сделать. Возможно, там есть более низкоуровневый класс, чтобы сделать это. В этом, наверное, и отличие инициализации interceptty и PySerial.
Можешь попробовать сделать перед PyModbus. Заработает?
Zubok ★★★★★ ( 03.11.21 12:41:22 )
Последнее исправление: Zubok 03.11.21 13:06:33 (всего исправлений: 2)
я не программер и языков не знаю; надо быстро и желательно кросплатформенно; готового консольного решения я не нашёл…
С этого надо было, наверное, начинать рассказ. :) Раз не программер, то и с PyModbus придется возиться как программеру?
Подправил, -echo еще поставил:
Т.е. ты - абсолютно некомпетентен в этом вопросе? И взялся выполнять? Ну-ну…
А потом удивляются, чего это у нас дороги постоянно рассыпаются, дома падают и мосты трескаются. А потому, что вот такие некомпетентные дятлы лезут своими грязными ручонками!
Во-первых, модбас - это дико устаревший протокол, разрабатывающийся еще во времена телефонных линий (поэтому там такие огромные задержки заложены протоколом: чтобы релюхи успели переключиться). Если тебе нужно что-то современное, используй CAN, ethernet и т.п.
Во-вторых, пытхон - это суррогат баша для вантузоидов! У них нет нормальной возможности скрипты писать, вот и лепят горбатого. Если ты - линуксоид, тебе пытхон вообще никогда в жизни не понадобится! Потому что есть вменяемые средства автоматизации. Тот же юниксвей.
В этом разделе мы обсудим основной синтаксис и разберем пример Python – запустим простую программу для печати Hello World на консоли.
Python предоставляет нам два способа запуска программы:
- Использование подсказки интерактивного помощника.
- Использование файла сценария.
Давайте подробно обсудим каждый из них.
Интерактивная подсказка помощника
Python предоставляет нам возможность выполнять инструкции интерактивного помощника. Это предпочтительнее в том случае, когда нас беспокоит вывод каждой строки программы Python.
Чтобы использовать интерактивный режим, откройте терминал(или командную строку) и введите python(python3 в случае, если в вашей системе установлены Python2 и Python3).
Откроется следующее приглашение, в котором мы можем выполнить оператор Python и проверить влияние на консоль.
После написания отчета о печати нажмите клавишу Enter.
Использование файла сценария(Программирование в режиме сценария)
Подсказка интерпретатора лучше всего подходит для выполнения однострочных операторов кода. Однако мы не можем писать код каждый раз на терминале. Не рекомендуется писать несколько строк кода.
Чтобы запустить этот файл с именем first.py, нам нужно запустить следующую команду на терминале.
Результат будет показан следующим образом.
Шаг – 4: Кроме того, мы также можем запустить файл с помощью терминала операционной системы. Но мы должны знать путь к каталогу, в котором мы сохранили наш файл.
- Откройте командную строку и перейдите в каталог.
- Нам нужно ввести ключевое слово python, затем имя файла и нажать Enter, чтобы запустить файл Python.
Многострочные операторы
Многострочные операторы записываются в блокнот как редактор и сохраняются с расширением .py. В следующем примере мы определим выполнение нескольких строк кода с помощью скрипта Python.
Плюсы и минусы режима сценария
Режим сценария также имеет несколько преимуществ и недостатков. Давайте разберемся в следующих преимуществах запуска кода в режиме скрипта:
- Мы можем запускать несколько строк кода.
- Отладка выполняется легко в режиме сценария.
- Подходит как для новичков, так и для экспертов.
Посмотрим на недостатки скриптового режима:
- Нужно сохранять код каждый раз, если мы вносим в него какие-либо изменения.
- Когда мы запускаем одну или несколько строк кода, это может быть утомительно.
Начало работы с PyCharm
В нашей первой программе мы использовали gedit в CentOS в качестве редактора. В Windows у нас есть альтернатива, например блокнот или блокнот ++, для редактирования кода. Однако эти редакторы не используются в качестве IDE для Python, поскольку они не могут отображать предложения, связанные с синтаксисом.
JetBrains предоставляет самую популярную и широко используемую кроссплатформенную IDE PyCharm для запуска программ Python.
Установка PyCharm
Как мы уже говорили, PyCharm – это кроссплатформенная IDE, поэтому ее можно установить в различных операционных системах. В этом разделе руководства мы рассмотрим процесс установки PyCharm в Windows, MacOS, CentOS и Ubuntu.
Windows
Чтобы создать первую программу для Pycharm, выполните следующий шаг.
Шаг – 2. Выберите место для сохранения проекта.
Шаг – 6. Результат появится внизу экрана.
Базовый синтаксис Python
Отступы в Python
Отступы – наиболее важная концепция языка программирования Python. Неправильное использование отступов приведет к ошибке “IndentationError” в нашем коде.
Отступы Python определяют, какая группа операторов принадлежит конкретному блоку. В языках программирования, таких как C, C ++, java, для определения блоков кода используются фигурные скобки <>.
В Python операторы, находящиеся на одном уровне справа, принадлежат одному блоку. Мы можем использовать четыре пробела для определения отступа. Давайте посмотрим на следующие строки кода.
В приведенном выше коде цикл for имеет блоки кода, если оператор имеет блок кода внутри цикла for. Оба с четырьмя пробелами с отступом. Последний оператор print() без отступа; это означает, что он не принадлежит циклу for.
Комментарии в Python
Мы можем добавить комментарий в каждую строку кода Python.
Хорошая идея – добавить код в любую строку раздела кода, цель которого неочевидна. Это лучший способ изучить при написании кода.
Типы комментариев
Python предоставляет возможность писать комментарии двумя способами – однострочный комментарий и многострочный комментарий.
Мы также можем написать комментарий рядом с оператором кода. Рассмотрим следующий пример.
Мы также можем использовать другой способ.
Это основное введение в комментарии. Просмотрите наш урок по комментариям Python, чтобы изучить его подробно.
Идентификаторы Python
Идентификаторы Python относятся к имени, используемому для идентификации переменной, функции, модуля, класса, модуля или других объектов. Есть несколько правил, которым нужно следовать при присвоении имени переменной Python.
- Имя переменной должно начинаться с английской буквы или символа подчеркивания(_).
- Имя переменной не может начинаться с числа.
- В имени переменной нельзя использовать специальные символы.
- Имя переменной чувствительно к регистру.
Мы определили базовый синтаксис языка программирования Python. Мы должны ознакомиться с основной концепцией любого языка программирования. Как только мы запомним концепции, упомянутые выше, изучение Python станет проще.
Если ты думаешь, что хакеру программирование не нужно, то глубоко ошибаешься! Да, можно качнуть Kali Linux и юзать готовые программки, копипастить код с форумов и вслепую качать скрипты с GitHub. Но потолок твоих умений, пока ты не научишься писать и понимать код, будет низким. В этой статье я попытаюсь в доступной форме научить тебя основам программирования. Начинаем с абсолютного нуля!
От редакции
И, поскольку это эксперимент, статья доступна без платной подписки.
Если у тебя на компе есть современный дистрибутив Linux, то в него уже входит Python 3, а писать первые программы будет удобно в IDLE — простом редакторе кода, который прилагается к Python. В Ubuntu, чтобы установить его, набери в консоли
В Windows при установке Python обязательно отметь на первом экране установщика галочку Add to Path, чтобы можно было запускать python3 из командной строки в любом удобном месте.
Запустив IDLE, зайди в Options → Configure IDLE, перейди на вкладку General и поставь галочку на пункте Open Edit Window, нажми ОK и перезапусти IDLE. Теперь можно писать программы, сохранять их и запускать клавишей F5. Ну что, погнали?
Переменные
В любом языке программирования есть такая штука, как переменные. Это как в школьной алгебре: вот переменная a = 1 , вот переменная b = 2 . То есть это такие абстрактные штуки, внутри них лежит значение, которое может меняться — например, когда ты пишешь после переменной знак равно и какое‑то новое значение.
Ну, то, что print( a) — это команда, которая печатает на экране текущее значение переменной, ты уже понял. Ты написал после знака равно снова саму переменную + 2 , то есть сначала в переменной было значение 2, потом к этому значению прибавили еще 2. На экране гордо красуется 4. Поздравляю, два и два сложили!
А если изначально неизвестно, какие числа надо складывать? Тогда пришлось бы сперва попросить юзера ввести их в консоли и нажать Enter. Давай так и сделаем:
Внутри скобочек у input ты пишешь пояснение для юзера, что конкретно его просят ввести. Но вот беда, по умолчанию все, что вводится через input, считается не числом, а строкой, поэтому, прежде чем складывать количество литров пива, нужно сначала преобразовать введенные строки в числа с помощью функции int().
Окей, преобразовал строки в числа, положил их в переменную c , а дальше‑то что за треш внутри скобок у print ? Тут складываются строки (строки всегда пишутся внутри кавычек), поясняющие, что именно выводится на экран, а результат сложения передается в функцию print( ) .
Чтобы строки безболезненно сложились с переменной c , в которой лежит число, надо преобразовать его в строку функцией str( ) — так же как мы превращали строки в числа, только наоборот.
Вообще, типов переменных много, но суть ты уловил — чтобы производить с переменными какие‑то действия, нужно их сначала привести к одному типу — к строковому, или к числовому, или еще к какому‑нибудь. Если с этим не заморачиваться, Python сложит не числа, а строки и введенные 2 и 3 литра пива в сумме дадут не 5, а целых 23. Хорошо бы так было в реальности!
Вот еще примерчик, рассчитывающий, сколько тебе еще пить пиво, исходя из средней продолжительности жизни в России:
Здесь мы вызываем функцию input( ) , чтобы получить значение, вычитаем его из 73 (средняя продолжительность жизни россиянина), не забыв превратить строку в число, а потом печатаем результат, превратив число обратно в строку и сложив с другими строками.
Итак, ты узнал, что такое целочисленные и строковые переменные, что эти типы можно преобразовывать друг в друга командами int( ) и str( ) . К тому же теперь ты умеешь получать переменные от пользователя с помощью функции input( 'Введите что-то') и печатать результаты с помощью функции print( ) .
Условия
В основе любой программы лежат условия. В зависимости от того, выполняются они или не выполняются, программа может пойти по одному или другому пути. Представь, ты едешь на машине и смотришь на часы: если уже есть десять вечера, то поворачиваешь домой, если нет, то можно заехать в гости. Точно так же работает и программа: проверяет какое‑то значение и сворачивает туда или сюда и выполняет соответствующий кусочек кода.
Блоки кода в Python отделаются отступами. Отступ на самом деле может быть любым, например некоторые предпочитают использовать вместо четырех пробелов клавишу Tab. Главное — не смешивать в одной программе отступы разного типа. Если уж начал использовать четыре пробела, то используй по всей программе, а то Python будет на тебя ругаться и унижать.
Функция lower(), прежде чем сравнивать условие, делает все буквы в строке маленькими, потому что глупый юзер может ввести слово YES с горящим Caps Lock, и это надо предусмотреть заранее.
На самом деле lower( ) — не просто функция, а метод класса string (строка). Именно поэтому он вызывается через точку после переменной, которая содержит строку. О классах и методах мы поговорим как‑нибудь в другой раз, а пока просто запомни, что некоторые функции вызываются таким образом.
Давай попробуем сделать условие для проверки логина и пароля, используя оператор И, который пишется как and . Он нужен для того, чтобы проверить одновременно выполнение первого и второго условия.
Читайте также: