Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Разработка
  3. Python
  4. Остановка бесконечного цикла по вводу ключевого слова

Остановка бесконечного цикла по вводу ключевого слова

Запланировано Прикреплена Закрыта Перенесена Python
15 Сообщения 1 Posters 67 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано
    #1

    Здравствуйте. Помогите пожалуйста новичку Питона. Имеется пользовательская функция(не особо важно какая). Её необходимо выполнять неопределенное количество раз по кругу (например циклом). Затем, после ввода определенного ключевого слова с клавиатуры компьютера, например "Stop" должен происходить выход из этого цикла. Кто-нибудь пожалуйста помогите реализовать приведенный алгоритм.

    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано
      #2

      Не нужно повторять вопросы. Я уже дал ответ на этот вопрос.

      Если вы совсем новичёк в программировании, то я могу дать полный текст примера на питоне. Но всё очень просто и так...

      1 ответ Последний ответ
      0
      • piP Не в сети
        piP Не в сети
        pi
        написал в отредактировано
        #3

        @sv-lary#6601 напишите пожалуйста код примера

        1 ответ Последний ответ
        0
        • piP Не в сети
          piP Не в сети
          pi
          написал в отредактировано
          #4

          @sv-lary#6601 вопрос повторил, потому что на обоих языках нужна реализация

          1 ответ Последний ответ
          0
          • piP Не в сети
            piP Не в сети
            pi
            написал в отредактировано
            #5

            > @Sailwork#6603 вопрос повторил,

            На выходные сделаю...

            1 ответ Последний ответ
            0
            • piP Не в сети
              piP Не в сети
              pi
              написал в отредактировано
              #6

              На С:

              #include <stdio.h>
              #include <stdlib.h>
              #include <unistd.h>
              #include <string.h>
              #include <pthread.h>
              
              
              // Флаг продолжения обработки в главном цикле
              int flag;
              
              // Функция управляет циклом основной обработки
              void * comander(void *param) {
                  char buf[32];
              
                  puts("Нить запущена");
                  while(1) {
                      fgets(buf, 31, stdin);
                      if (strncmp(buf, "exit", 4) == 0) {
                          puts("Останавливаю процесс обработки");
                          flag = 0;
                      }
                  }
                  return NULL;
              }
              
              
              // Главная функция программы
              int main(int argc, char *argv[])
              {
                  pthread_t thread;
                  pthread_attr_t attr;
                  int rc;
                  
                  puts("Запускаю процесс управления");
                  flag = 1;
                  pthread_attr_init(&attr);
                  rc =  pthread_create(&thread, &attr, comander, NULL);
              
                  while (flag) {
                      puts("Работаю...");
                      sleep(1);
                  }
                  
                  puts("Работа завершена!");
                  
                  return 0;
              }
              
              
              1 ответ Последний ответ
              0
              • piP Не в сети
                piP Не в сети
                pi
                написал в отредактировано
                #7

                Исходный текст на питоне. Тут есть тонкость... Потоки (Thread) в питоне реализованы не очень адекватно. Поэтому, если в С-программе один поток ВЫВОДИЛ на консоль, а другой, в это же самое время ВВОДИЛ и всё это нормально работало, то в питоне такого нет.

                Максимум, что я успеваю ввести во время секундной паузы вывода - одну букву. Поэтому здесь командой выхода из цикла является не слово "exit", а буква 'q':

                import threading
                import time
                
                flag = True
                
                def controller():
                    """Функция ожидания команды остановки"""
                    global flag
                
                    # Бесконечный цикл ввода команд
                    while True:
                        in_str = input()
                        print("Ввели '{}'".format(in_str))
                        if in_str == 'q':   # Введена команда останова?
                            flag = False
                            return
                
                """Главная функция программы"""
                
                # Запускаем нить управления
                t = threading.Thread(target=controller)
                t. start()
                
                # Основной цикл обработки
                while flag:
                    # Просто что-то делаем... Ну, хотя бы - спим!
                    time.sleep(1)
                    print("Я работаю...")
                
                1 ответ Последний ответ
                0
                • piP Не в сети
                  piP Не в сети
                  pi
                  написал в отредактировано
                  #8

                  Спасибо большоое, пока буду разбираться в том, что вы написали. Но я немного не ожидал, что то, что не работает в обычной вижле на виндовс будет работать на rasberry pi(Linux). Я уже думал, что мне нужно будет скачивать на мою расберри библиотеки, а потом мучаться с их подключением, но как только я вставил код в расберри - все без ошибок заработало. Где можно узнать про основные отличия в работе с кодом(программировании на с++ или Python) и с библиотеками на windows и на Linux (raspberry pi) и какие библиотеки имеются в линуксовских(raspberry pi) ide? Очень бы хотелось научится кодить под Linux (raspberry pi) на с++ и питоне

                  1 ответ Последний ответ
                  0
                  • piP Не в сети
                    piP Не в сети
                    pi
                    написал в отредактировано
                    #9

                    > @Sailwork#6607 Где можно узнать про основные отличия в работе с кодом(программировании на с++ или Python)

                    Если у вас с английским ОК, то лучше всего смотреть фирменное издательство "Малинки". Там очень много книг по разным темам:

                    https://magpi.raspberrypi.org/books

                    Там есть серия книг под общим названием "Raspberry Pi Projects" в которых описываются многочисленные варианты использования малинки. Есть книги и по конкретным темам.

                    Например, про С на малинке: https://magpi.raspberrypi.org/books/essentials-c-v1
                    Или про GUI на Python: https://magpi.raspberrypi.org/books/create-guis

                    Если с английским тяжко, то бы рекомендовал начать с отличной книги:

                    "Raspberry Py Сбоник рецептов". Саймон Монк. O'Reily

                    Вышло уже два, а может и три издания. Иесть в бумажном и электронном виде.

                    1 ответ Последний ответ
                    0
                    • piP Не в сети
                      piP Не в сети
                      pi
                      написал в отредактировано
                      #10

                      А эта книга для Си, а если я хочу писать код на плюсах? Там же все таки отличия есть в командах(например классах и объектах) или под Linux(расберри) все равно и функционал у них одинаковый?

                      1 ответ Последний ответ
                      0
                      • piP Не в сети
                        piP Не в сети
                        pi
                        написал в отредактировано
                        #11

                        Когда я создал проект из шаблона на с++ возникли ошибки. Что не так?[upl-image-preview url=https://raspberrypi.ru/forum/assets/files/2021-05-22/1621680590-820543-2021-05-22-134815-1920x1080-scrot.png]

                        1 ответ Последний ответ
                        0
                        • piP Не в сети
                          piP Не в сети
                          pi
                          написал в отредактировано
                          #12

                          > @Sailwork#6609 А эта книга для Си, а если я хочу писать код на плюсах?

                          Специальной книжки по плюсам для малинки я не знаю. Думаю, что нет большого различия. Но я не считаю, что плюсы - хороший вариант для малинки. Если приложение большое и сложное - надо писать на С, что бы не давать лишнюю нагрузку на систему. Если приложение простое - пишите на питоне - дёшево и сердито 🙂

                          1 ответ Последний ответ
                          0
                          • piP Не в сети
                            piP Не в сети
                            pi
                            написал в отредактировано
                            #13

                            > @Sailwork#6610 возникли ошибки

                            Существует такое правило, практически на всех форумах, типа этого: НИКОГДА не используйте скриншоты. Всё должно быть исключительно в текстовом виде, а особенно - сообщения об ошибках. Что бы отвечающий мог легко откопипастить куски кода, сообщения об ошибках и т.д. и найти решение.

                            Насколько я смог разглядеть вашу картинку (после мучительного изучения) у вас не линкуется главная программа с библиотекой libpthread. Наиболее веротная причины - вы не указали эту библиотеку в параметрах компилятора. Попробуйте вот так:

                            g++ main.cpp -lpthread

                            1 ответ Последний ответ
                            0
                            • piP Не в сети
                              piP Не в сети
                              pi
                              написал в отредактировано
                              #14

                              Я принял к сведению, спасибо, все заработало. Случаем не знаете как понять, какие библиотеки нужно указывать в параметрах компилятора, а какие нет? И еще, не могу понять, зачем у вас в коде на си библиотека std.lib?

                              1 ответ Последний ответ
                              0
                              • piP Не в сети
                                piP Не в сети
                                pi
                                написал в отредактировано
                                #15

                                > @Sailwork#6613 какие библиотеки нужно указывать в параметрах компилятора, а какие нет?

                                Для этого во всех *NIX системах имеется команда 'man' - 'manual'. Например, в своей программе Вы используете ф-цию pthread_create() Что бы узнать, в какой библиотеке содержится эта функция и какой флаг компоновки надо использовать, выполняем команду:

                                man pthread_create
                                И видим ответ

                                #include <pthread.h>
                                Compile and link with -pthread.
                                

                                > @Sailwork#6613 зачем у вас в коде на си библиотека std.lib?

                                Я начинал писать программу из шаблона, в котором этот инклюд есть. Проверять - нужен он или нет я не стал, т.к. если он не нужен, то он просто проигнорируется компилятором.

                                1 ответ Последний ответ
                                0

                                • Войти

                                • Нет учётной записи? Зарегистрироваться

                                • Login or register to search.
                                • Первое сообщение
                                  Последнее сообщение
                                0
                                • Категории
                                • Главная
                                • Документация
                                • Последние
                                • Пользователи