Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
3 / 3 / 2
Регистрация: 21.10.2011
Сообщений: 50

Продолжение выполнения цикла после нажатия клавиши

05.02.2013, 05:39. Показов 6066. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется двумерный list, пример:
Python
1
2
3
[[1, 11, 111],
[2, 22, 222],
[3, 33, 333]]
, в котором заключены введёные пользователем данные. Необходимо составить схему (точнее, list с данными, как относятся элементы каждого из внутренних листов. Т.е. есть ли связи типа:
root - 1
root - 11
root - 111
root - 1 - 2
root - 1 - 22
...
root - 111 - 222 - 3
root - 111 - 222 - 33
root - 111 - 222 - 333
При этом, если установлено, что нет связи
root - 1
, то и спрашивать у пользователя на счёт, к примеру, связи
root - 1 - 2
не имеет смысла. Пример необходимого сопостовления в нарисованной схеме и текстовом виде:
http://rghost.ru/43532322/image.png
http://pastebin.com/SSXWCW1c

В примере все связи захватывают все 4 группы, но это может быть не так. К примеру, если пользователь отвергнет связи
root - 111 - 222 - 3
root - 111 - 222 - 33
root - 111 - 222 - 333
, то в ветке root - 111 - 222 - * максимальной будет лишь root - 111 - 222 (например, узел "система - организация - кадры" может не иметь связи с последним блоком (исполнители)).

На рисунке обычная древовидная структура, у которой немного видоизменён низ. Есть 2 группы по 4 элемента, 1 группа с 6ю элементами, и 1 корневой элемент. Пользователь сначала решает, нужны ли ему каждый из элементов 1й группы. Затем каждый из нужных элементов 1й группы соединяет в каждым из элементов 2й группы и смотрит, нужно ли ему каждое из соединений. Затем каждую из полученных пар сравнивает с каждым из элементов 3й группы... Из примера всё, но вообще так до тех пор, пока не закончатся группы.

Очень слабо представляю, как это всё можно реализовать. Надеюсь, подробно объяснил структуру.

Конкретно проблемы возникли, во-первых, в обходе каждой из связей. Чувствую, что надо использовать рекурсию, но как - всё понять не могу. Во-вторых, как корректно сделать ожидание нажатия клавиши в цикле с паузой его работы. Программа графическая, используется фреймворк PyQt 4.9.1, Python 3.2.3. Смотрел в сторону QMutex, но выглядит очень костыльно.

В программировании я относительно новый человек, алгоритмов ещё не знаю, но есть желание писать программы без костылей. Несколько дней не вылезаю из книжек и гугла, тем не менее всё никак не найти решение этой проблемы. Боюсь, без помощи более опытных программистов не справлюсь.

Добавлено через 22 часа 49 минут
Решение ожидания ввода клавиши с последующим совершением одной итерации: http://pastebin.com/ZTTuG5gR

А вот задача декартова произведения неизвестного количества групп пока остаётся открытой...

Добавлено через 1 час 5 минут
Ну вот, отдохнул немного и всё сразу написалось. http://pastebin.com/eNTbwRet . Проблема декартова произведения решена, остались мелочи.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.02.2013, 05:39
Ответы с готовыми решениями:

Продолжение выполнения цикла после нажатия клавиши
Собственно короткий вопрос от новичка по Qt 4.9.1: Имеется несколько вложенных циклов, в самой глубине которого необходимо вывести в...

Продолжение выполнения цикла только после нажатия другой кнопки
Добрый вечер!! Вопрос следующий: Как организовать чтобы цикл продолжался только после того как будет нажата другая кнопка? А именно: ...

Продолжение выполнения программы после нажатия кнопки
Подскажите пжлст как сделать так чтобы программа на определенных моментах останавливалась и не продолжала выполнятся пока не будет нажата...

4
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.02.2013, 06:09
python.org. product

Python
1
2
3
4
5
6
>>> import itertools
>>> 
>>> t = [[1, 2, 3], ['a', 'b', 'c'], ['_1', '_2', '_3'], ['_a', '_b', '_c']]
>>> print(*itertools.product(*t))
(1, 'a', '_1', '_a') (1, 'a', '_1', '_b') (1, 'a', '_1', '_c') (1, 'a', '_2', '_a') (1, 'a', '_2', '_b') (1, 'a', '_2', '_c') (1, 'a', '_3', '_a') (1, 'a', '_3', '_b') (1, 'a', '_3', '_c') (1, 'b', '_1', '_a') (1, 'b', '_1', '_b') (1, 'b', '_1', '_c') (1, 'b', '_2', '_a') (1, 'b', '_2', '_b') (1, 'b', '_2', '_c') (1, 'b', '_3', '_a') (1, 'b', '_3', '_b') (1, 'b', '_3', '_c') (1, 'c', '_1', '_a') (1, 'c', '_1', '_b') (1, 'c', '_1', '_c') (1, 'c', '_2', '_a') (1, 'c', '_2', '_b') (1, 'c', '_2', '_c') (1, 'c', '_3', '_a') (1, 'c', '_3', '_b') (1, 'c', '_3', '_c') (2, 'a', '_1', '_a') (2, 'a', '_1', '_b') (2, 'a', '_1', '_c') (2, 'a', '_2', '_a') (2, 'a', '_2', '_b') (2, 'a', '_2', '_c') (2, 'a', '_3', '_a') (2, 'a', '_3', '_b') (2, 'a', '_3', '_c') (2, 'b', '_1', '_a') (2, 'b', '_1', '_b') (2, 'b', '_1', '_c') (2, 'b', '_2', '_a') (2, 'b', '_2', '_b') (2, 'b', '_2', '_c') (2, 'b', '_3', '_a') (2, 'b', '_3', '_b') (2, 'b', '_3', '_c') (2, 'c', '_1', '_a') (2, 'c', '_1', '_b') (2, 'c', '_1', '_c') (2, 'c', '_2', '_a') (2, 'c', '_2', '_b') (2, 'c', '_2', '_c') (2, 'c', '_3', '_a') (2, 'c', '_3', '_b') (2, 'c', '_3', '_c') (3, 'a', '_1', '_a') (3, 'a', '_1', '_b') (3, 'a', '_1', '_c') (3, 'a', '_2', '_a') (3, 'a', '_2', '_b') (3, 'a', '_2', '_c') (3, 'a', '_3', '_a') (3, 'a', '_3', '_b') (3, 'a', '_3', '_c') (3, 'b', '_1', '_a') (3, 'b', '_1', '_b') (3, 'b', '_1', '_c') (3, 'b', '_2', '_a') (3, 'b', '_2', '_b') (3, 'b', '_2', '_c') (3, 'b', '_3', '_a') (3, 'b', '_3', '_b') (3, 'b', '_3', '_c') (3, 'c', '_1', '_a') (3, 'c', '_1', '_b') (3, 'c', '_1', '_c') (3, 'c', '_2', '_a') (3, 'c', '_2', '_b') (3, 'c', '_2', '_c') (3, 'c', '_3', '_a') (3, 'c', '_3', '_b') (3, 'c', '_3', '_c')
>>>
1
3 / 3 / 2
Регистрация: 21.10.2011
Сообщений: 50
05.02.2013, 13:22  [ТС]
Где же вы раньше-то были... О product() я знал, но о *args не знал. Точнее забыл. Нагуглил, понял, офигенно. Как-то так оно проще, да, спасибо.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.02.2013, 14:18
Цитата Сообщение от nivs Посмотреть сообщение
Где же вы раньше-то были...
раньше мы ждали, когда появится более внятное объяснение задачи
0
3 / 3 / 2
Регистрация: 21.10.2011
Сообщений: 50
05.02.2013, 14:56  [ТС]
Да, это моя пожизненная беда...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.02.2013, 14:56
Помогаю со студенческими работами здесь

Выход из цикла после нажатия определенной клавиши
Здравствуйте, собственно, хотел узнать, как мне выйти из цикла, нажав определенную клавишу? Обычный цикл по заполнению массива

Выход из цикла после нажатия клавиши, например пробела
Помогите с такой проблемой, я написал программу и надо сделать так чтобы после нажатия клавишы(например пробела, шифта, ну или какой...

Выход из цикла и продолжение выполнения
Доброго времени суток. Нужно продолжить выполнение после выхода из цикла. Можно наглядный пример? @echo off echo. SetLocal...

Выход из цикла или продолжение выполнения в С++
Надо чтобы при вводе W, A, S или D цикл прекратился, а если не введено ничего -- продолжался. При этом он не должен останавливаться. С++

После нажатия клавиши Enter или нажатия на Button
Помогите пожалуйста.:-[ Задача: После нажатия клавиши Enter или нажатия на Button поле курсора переходит в соответствующий компонент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru