2014-09-18 4 views
-2

Я пытаюсь в течение некоторого времени представить себе способ генерации всех возможных капитализаций слова в Python. Например:Как получить все капитализации слова?

hello 
Hello 
HEllo 
... 
heLLo 
... 
HeLlO 

Я нашел некоторые встроенные функции, которые работают по капитализации (.capitalize(), например), но они, кажется, для решения типичных случаев (простые предложения, библиография). Буду признателен за подсказку о том, где искать, как for петли я думал, как рекурсия не решение (я не буду упоминать их здесь, они были так неправильно)


Разъяснение : поскольку от 5 до 9 человек (через удержание, понижение и комментарии) нуждаются в разъяснении, я попытаюсь сделать это, используя разные слова.

У меня есть строка из символов от А до Я (позже названный слово). Я бы хотел, чтобы в Python получить список упомянутого слова , но капитализируется всеми возможными способами (т. Е. Смесью букв верхнего регистра (например, M) и нижних регистров (например, f). список похож на один из приведенной выше (с вариациями словаhello.

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

+2

Какая проблема в реальной жизни адресуется этот вопрос? – Wolf

+0

Это пахнет как проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Что ты пытаешься сделать? - Какова твоя конечная цель, ОП? – amphetamachine

+0

Не знаю, что не ясно в моем вопросе: имея слово, я хотел бы получить алгоритм, чтобы получить список всех капитализаций этого слова. В Python. Реальная проблема заключается в том, что я хочу получить этот список (потому что он мне нужен для чего-то совершенно не связанного с вопросом). Я был бы рад прояснить, но я не знаю, что дальше прояснить здесь. – WoJ

ответ

5

Использование itertools.product:

import itertools 
for chars in itertools.product('hH', 'eE', 'lL', 'lL', 'oO'): 
    print(''.join(chars)) 

ИЛИ

word = 'hello' 
for chars in itertools.product(*zip(word, word.upper())): 
    print(''.join(chars)) 

выход:

hello 
hellO 
helLo 
helLO 
heLlo 
heLlO 
heLLo 
heLLO 
... 
+0

+1 для второго – Wolf

+0

+1, Единственное, что я добавил бы, это то, что это можно написать как однострочный со списком: '['' .join (l) для l в itertools.product ('hH' , 'eE', 'lL', 'lL', 'oO')] ' – miku

0

Когда реинтерпретация получить вопроса, это также может означать:

Как оценить вклад от же раскладки с сломанная клавиша переключения (при условии, что это не имеет значения)?

Тогда, я бы, наверное, попробовать этот

import re 

m = re.match(user_input, "hello", re.IGNORECASE); 

... или просто это

user_input.lower() == "hello" 

 Смежные вопросы

  • Нет связанных вопросов^_^