Вывод строки не является нормальным

#python

#python

Вопрос:

Я столкнулся с проблемой, связанной с форматированием строк в Python.

У меня есть определенная проблема, которую нужно решить: программа принимает любую строку. Затем он создает список с элементами в качестве каждого символа строки. Однако он должен изменять элементы, которые являются == 's' символом перед ними и после. Кроме того, символ перед основным должен выводиться два раза.

Ввод: test_Stringss

Вывод: [‘t’, ‘e’, ‘eet’, ‘t’, ‘_’, ‘__t’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ‘ggs’, ‘s’]

Это то, что я придумал:

 st = input("input string: ")
st = st.lower()
print(st)
l = []
for a in st:
  posA=st.find(a)
  print(posA)
  if (a=='s') and (posA!=len(st)) and (posA!=0):
    newst = st[posA-1 : posA]*2   st[posA 1 : posA   2]
    l.append(newst)
  else:
    l.append(a)
print(l)
  

Однако на том же входе, что и показано в примере выше, он выдает следующий вывод:
['t', 'e', 'eet', 't', '_', 'eet', 't', 'r', 'i', 'n', 'g', 'eet', 'eet']

Уже довольно давно пытаюсь справиться с этой проблемой. Я был бы очень признателен за любую помощь!

Комментарии:

1. Что вы подразумеваете под » перед основным «?

2. Я имею в виду символ перед тем, который мы сейчас проверяем в for цикле

Ответ №1:

str.find(...) сообщает о первом появлении буквы в строке. Вместо этого используйте enumerate — нет необходимости искать позицию внутри строки:

 st = "test_Stringss".lower() 
print(st)
l = []
for posA, a in enumerate(st):
    print(posA)
    if (a == 's') and (posA != len(st)) and (posA != 0):
        newst = st[posA-1 : posA]*2   st[posA 1 : posA   2]
        l.append(newst)
    else:
        l.append(a)
print(l) 
  

Однако вам нужно исправить вывод последнего символа.

Комментарии:

1. Большое вам спасибо за вашу помощь! Все еще погружаюсь в Python 🙂

Ответ №2:

Я думаю, может быть, проблема связана с тем, что .метод find выводит только позицию первого символа строки, равную той, которую вы ищете. Попробуйте использовать цикл while вместо первого цикла for, чтобы у вас уже была позиция переменной, которую вы ищете (это будет увеличенная переменная).

Ответ №3:

Надеюсь, это то, что вы хотите, и не уверен, почему s в вашем Output есть, даже если вы хотите заменить s :

 s = 'test_Strings'

for i,c in enumerate(s):
    if c.lower() != 's':
        print(c, end='')
    elif i == 0:
        print(s[1], end='')
    elif i == len(s) - 1:
        print(s[i-1]*2 , end='')
    else:
        print(s[i-1]*2   s[i 1], end='')

# Output: teeett___ttringgg