#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