Как сделать опрос на python

Обновлено: 04.07.2024

В основном это опрос, и каждый раз, когда кто-то вводит что-то, он добавляет его в список. Затем, когда кто-то говорит "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, нам нужно запустить следующую команду на терминале.

Режим скрипта

Создание нового файла

Результат Hello World

Выполнить модуль

Результат будет показан следующим образом.

Hello World

Шаг – 4: Кроме того, мы также можем запустить файл с помощью терминала операционной системы. Но мы должны знать путь к каталогу, в котором мы сохранили наш файл.

  • Откройте командную строку и перейдите в каталог.

Командная строка

  • Нам нужно ввести ключевое слово python, затем имя файла и нажать Enter, чтобы запустить файл Python.

Ввод ключевого слова и имени файла

Многострочные операторы

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

Результат

Первая программа на Python

Плюсы и минусы режима сценария

Режим сценария также имеет несколько преимуществ и недостатков. Давайте разберемся в следующих преимуществах запуска кода в режиме скрипта:

  • Мы можем запускать несколько строк кода.
  • Отладка выполняется легко в режиме сценария.
  • Подходит как для новичков, так и для экспертов.

Посмотрим на недостатки скриптового режима:

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

Начало работы с PyCharm

В нашей первой программе мы использовали gedit в CentOS в качестве редактора. В Windows у нас есть альтернатива, например блокнот или блокнот ++, для редактирования кода. Однако эти редакторы не используются в качестве IDE для Python, поскольку они не могут отображать предложения, связанные с синтаксисом.

JetBrains предоставляет самую популярную и широко используемую кроссплатформенную IDE PyCharm для запуска программ Python.

Установка PyCharm

Как мы уже говорили, PyCharm – это кроссплатформенная IDE, поэтому ее можно установить в различных операционных системах. В этом разделе руководства мы рассмотрим процесс установки PyCharm в Windows, MacOS, CentOS и Ubuntu.

Windows

Чтобы создать первую программу для Pycharm, выполните следующий шаг.

Работа с PyCharm

Шаг – 2. Выберите место для сохранения проекта.

Шаг 2

Выбор файла Python

Шаг 4

Запуск первой программы на Python

Шаг – 6. Результат появится внизу экрана.

Шаг 6 - результат работы

Базовый синтаксис Python

Отступы в Python

Отступы – наиболее важная концепция языка программирования Python. Неправильное использование отступов приведет к ошибке “IndentationError” в нашем коде.

Отступы на Python

Отступы 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 . Он нужен для того, что­бы про­верить одновре­мен­но выпол­нение пер­вого и вто­рого усло­вия.

Читайте также: