LINUX.ORG.RU

python

 


0

1

привет)))))))))))))))))))

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

Ответ на: комментарий от linuxpc

Ты сначала основы-то закрепи, может тебе и не нужны циклы. Разберись с переменными, операторами, конструкцией кода и там уже начнешь понимать что к чему. Запусти интерпретатор python в консоли и прямо в нем и играйся с примерами из книг.

RedEyedMan4 ★★★★★ ()
Последнее исправление: RedEyedMan4 (всего исправлений: 1)

Ты сам то понял, что сделать хочешь? Я вот не очень.

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

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

Norgat ★★★★★ ()
Ответ на: комментарий от Norgat

да конечно из всего алфавита, чтобы методом случайного переобора было состалвенно , например слово python и как только оно получилось, перебор бы остановился с числами что-то вроде подобное могла, а вот с слово-нет

linuxpc ()
Ответ на: комментарий от linuxpc

я хочу написать сам)))
что должно лежать в основе, циклы? while или for?
linuxpc

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

Dron ★★★★★ ()
Ответ на: комментарий от linuxpc

ну я не знаю, я же только учусь вот вы бы подсказали как

Подсказать тебе как правильно задавать вопросы? Надо это делать четко, со знаками препинания и чтобы помощь телепатов не требовалась

Siado ★★★★★ ()
Ответ на: комментарий от eternal_sorrow

Да задача у него простая, есть буква 'p' перебирает алфавит пока не будет буква 'p', сохраняет, есть буква 'y', перебирает .... получилось слово «python», выводит его на экран, только вот зачем всё это? Хотя в качестве обучения если он полный NULL задача нормальная.

Dron ★★★★★ ()
Последнее исправление: Dron (всего исправлений: 1)
Ответ на: комментарий от Dron

Боюсь, у него все совсем плохо. Скорее всего он хочет из кучи букв на входе собирать слова по какому-то словарю. Т.е. есть буквы отк, он получает кот, ток. Но сформулировать такую простую задачку он не в состоянии.

ТС, тебе нужны: словарь, полная перестановка букв на входе (все комбинации), не забудь ограничить количество букв на вводе, т.к. перестановки растут очень быстро. Составляешь комбинацию - ищешь в словаре на совпадение, если такое есть - выводишь и переходишь к составлению следующей. При большом словаре - 50k слов и большом количестве букв (55, вроде столько в самом длинном слове, не являющимся иностранным названием) тормозилова у тебя будет знатная (55! - невероятно большое число и 10^73 степени комбинаций ты будешь перебирать до конца времен, в прямом смысле слова). По этому такой примитивный алгоритм не годится, если нужны настолько длинные слова. Однако, длинных слов мало (да и сам словарь крохотный по сравнению с 55!), так что словарь надо составлять в виде дерева всех возможных слов и из этого происходит другой возможный наивный алгоритм - ты составляешь из своих букв перестановки из скольких-то элементов, например по 3, а дальше смотришь есть ли ветка в дереве, начинающаяся с твоей комбинации и проверяешь буквы по ней. Но тут напрашивается ещё более простая, а возможно и более производительная идея - ты не составляешь никаких комбинаций, а перебирая свои буквы проходишь по всем 33 веткам, соответствующим 33 буквам русского алфавита и оставшимися буквами пытаешься получить слова.

Например:

У тебя в словаре есть дерево

с-л-о-н-/n
 |   \в-о-n/n
 -е-л-о-/n
     \ь-/n
/n - символ конца строки, он тебе очень нужен, т.к. есть слова
т-о-к-/n
     \е-н/n
И набор букв лосово Ты не находишь дерева для л, для о, находишь для с, у тебя остается набор лоово, в дереве есть варианты - л и е, е у тебя нет, переходишь к сл, остается оово, ищешь о в своем наборе, остается ово получается сло, ищешь н - нет, ищешь в, получается слов, остается о, ищешь о, получается слово, видишь символ конца строки, выдаешь слово на печать, букв осталось 0, программа завершена. Осталось рассмотреть другие случаи, когда можно составить несколько слов (там придется ходить не по одной ветке, а по нескольким, соответствующим всем словам, которые можно составить), думаю ты и сам справишься, если немного соображаешь. Если не соображаешь, то бери книжку по комбинаторике и книжку по дискретной математике и ознакомься с ними (деревья, перестановки, сочетания, графы, алгоритм фронта волны и прочие базовые понятия, иначе дойдешь до первого варианта алгоритма, который в худшем случае работает по очень грубым подсчетам 10^54 лет) и будешь бегать по интернету и кричать, почему программа зависла, где я ошибся и т.д., да и то только после того, как на ввод будет подано длинное слово, с короткими то проблем не будет.

peregrine ★★★★★ ()
Ответ на: комментарий от linuxpc

я хочу написать сам))) что должно лежать в основе, циклы? while или for?

Однозначно while - до тех пор, пока слово не будет составлено полностью.

Ещё нужен rand для подбора очередной буквы.

Но при таком подборе будут находиться только короткие слова, например, «дом», «сон», «кот» и т.д. До длинных, типа «рефрежиратор» вряд ли дело дойдёт.

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

Novator ★★★ ()

сделай так:
1) буквы читай из /dev/urandom
2) слова опиши при помощи EBNF
3) для распознавания примени алгоритм CYK
...
рраз, и ты разработчик первого русского опенсорсного компилятора
станешь знаменит

Einstok_Fair ()