2014-12-04 4 views
2

Скажем, у меня есть строка.Python 3.4 help - использование нарезки для замены символов в строке

"poop"

Я хочу изменить "poop" к "peep".

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

Вот моя попытка сделать выше.

def getword(): 
    x = (input("Please enter a word.")) 
    return x 
def main(): 
    y = getword() 
    for i in range (len(y)): 
     if y[i] == "o": 
      y = y[:i] + "e" 
    print (y) 

main() 

Как вы можете видеть, когда вы запускаете его, это не значит, что я хочу. Вот мой ожидаемый результат.

Enter a word. 
>>> brother 
brether 

Нечто подобное. I требуется, чтобы сделать это, используя нарезку. Я просто не знаю, как это сделать.

Пожалуйста, держите ваш ответ простым, так как я немного новичок в Python. Благодаря!

+0

Вы можете использовать у. замените («o», «e») и избегайте петли и нарезки вообще. – MirekE

+0

Я сделал это, и это не сработало. PLUS это домашнее задание, и нарезка необходима. @MirekE –

ответ

2

Это использует нарезку (но имейте в виду, что нарезка не лучший способ сделать это):

def f(s): 
    for x in range(len(s)): 
     if s[x] == 'o': 
      s = s[:x]+'e'+s[x+1:] 
    return s 
+0

будет ли это полный код? или я должен положить это под 'def getWord()' и изменить f на [email protected] –

+0

@asdfmovie Просто замените тело метода 'main' на строки 2-4 и добавьте' s = getword() 'сверху и' print (s) 'внизу. :) –

0

Можно нарезать даже в этой ситуации ???

Единственное вероятное решение, которое я думаю, будет работать, как заявила MirekE, - y.replace("o","e").

+2

Я не знаю. @ Player72 –

1

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

def getword(): 
    x = (input("Please enter a word.")) 
    return x 

def main(): 
    y = getword() 
    output = '' 
    for i in range(len(y)): 
     if y[i] == "o": 
      output = output + 'e' 
     else: 
      output = output + y[i] 
    print(output) 

main() 

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

EDIT

Используя нарезку, я полагаю, вы могли бы сделать:

def getword(): 
     x = (input("Please enter a word.")) 
     return x 

def main(): 
    y = getword() 
    output = ''          # String variable to hold the output string. Starts empty 
    slice_start = 0         # Keeps track of what we have already added to the output. Starts at 0 
    for i in range(len(y) - 1):      # Scan through all but the last character 
     if y[i] == "o":        # If character is 'o' 
      output = output + y[slice_start:i] + 'e' # then add all the previous characters to the output string, and an e character to replace the o 
      slice_start = i + 1      # Increment the index to start the slice at to be the letter immediately after the 'o' 
    output = output + y[slice_start:-1]    # Add the rest of the characters to output string from the last occurrence of an 'o' to the end of the string 
    if y[-1] == 'o':         # We still haven't checked the last character, so check if its an 'o' 
     output = output + 'e'       # If it is, add an 'e' instead to output 
    else: 
     output = output + y[-1]      # Otherwise just add the character as-is 
    print(output) 

main() 

Комментарии должны объяснить, что происходит. Я не уверен, что это самый эффективный или лучший способ сделать это (что действительно не имеет значения, поскольку нарезка - это ужасно неэффективный способ сделать это в любом случае), просто первое, что я взломал вместе, которое использует нарезку.

EDIT Да ... Решение Ourous является гораздо более элегантный

+1

Я вижу. Можете ли вы использовать нарезку? Это требуется в задании. Однако я могу учиться на этом. –

+1

Я думаю, что когда вы используете срез, вы можете использовать его со списками. как разрезанные части списков. @ rfj001 –

+1

Если вы считаете, что это нарезка ... – rfj001

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