2014-11-17 4 views
0

мне нужна функция питона, которая может сделать следующее:Поиск всех вариантов слово с Смещенным Capital Letter

Учитывая ввод «т» и «сплетен», он должен возвращать список, как так: [» Tattle», 'сплетничать', 'сплетничать'] Или с 'Z' и 'ZZZZZ': [ 'Zzzzz', 'Zzzzz', 'Zzzzz', 'Zzzzz', 'Zzzzz']

Я закодированы следующее, но это не работает со вторым примером, потому что текущая функция проверяет, соответствует ли basestr тем, что уже есть в результирующем списке R, и может отображать ложные срабатывания из-за слов с несколькими басрерами уже в слове. У кого-нибудь есть совет?

def all_variants(wrapletter,word): 
    L,R,WLU,basestr=list(word),[],wrapletter.upper(),'' 
    if L.count(wrapletter)==1: 
     for char in L: 
      if wrapletter==char: 
       basestr=basestr+WLU 
      else: 
       basestr=basestr+char 
     R.append(basestr) 
     return(R) 
    else: 
     for i in range(L.count(wrapletter)): 
      basestr='' 
      if i==0 and L[0]==wrapletter: 
       basestr=WLU 
       for char in range(1,len(L)): 
        basestr=basestr+L[char] 
       R.append(basestr) 
      else: 
       for char in L: 
        if wrapletter==char: 
         if WLU in basestr: 
          basestr=basestr+char 
         elif basestr in str(R): 
          basestr=basestr+char 
         else: 
          basestr=basestr+WLU 
        else: 
         basestr=basestr+char 
      R.append(basestr) 
     R.remove(R[0]) 
     return(R) 
+1

Ваше сообщение о проблеме: «Это не работает». Это примерно так же полезно, как и ответ «заставить его работать». – Blorgbeard

+0

@Blorgbeard: Если вы запустите его функцию, вы увидите, какой результат он получает, и его проблема указывает, какой желаемый результат. – Dair

+0

@Pound Мне не нужно * запускать свой код *, чтобы выяснить его проблему. «Не работает» может быть что угодно. – Blorgbeard

ответ

1

Это не изящно, но возможно, это то, что вам нужно?

target = "daaddaad" 

def capitalize(target_letter, word): 
    return [word[:i] + word[i].upper() + word[i + 1:] 
      for i in xrange(len(word)) if word[i] == target_letter] 

print capitalize("d", target) 

Выходы:

['Daaddaad', 'daaDdaad', 'daadDaad', 'daaddaaD'] 
1
def all_variants(wrapletter, word): 
    list = [] 
    for i in range(len(word)): 
     if(word[i]==wrapletter): 
      start = word[0:i].lower() 
      str = word[i].upper() 
      end = word[i+1::].lower() 
      list.append(start+str+end) 
    return list 

Они вернулись, когда я запустил эту функцию:

>>>all_variants("t", "tattle") 
['Tattle', 'taTtle', 'tatTle'] 

>>>all_variants("z", "zzzzz") 
['Zzzzz', 'zZzzz', 'zzZzz', 'zzzZz', 'zzzzZ'] 
+0

Очень простой и интуитивно понятный интерфейс. Спасибо! – PythonDunce

1
inp = 't' 
word = 'tattle' 
inds = (i for i,ele in enumerate(word) if ele == inp) 

print([word[:i]+word[i].upper()+word[i+1:] for i in inds]) 
['Tattle', 'taTtle', 'tatTle'] 
1

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

def all_variants(wrapletter, word): 
    variants = [] 
    for i, letter in enumerate(word): 
     if letter == wrapletter: 
      variants.append(word[:i] + letter.upper() + word[i+1:]) 
    return variants 

print all_variants('z', 'zzzzz') 
print all_variants('t', 'tattle') 
+0

Кажется очень быстро работать; благодаря! – PythonDunce