Итак, у нас есть два списка: a
, который состоит только из буквенных символов, и b
, который является вводом пользователя в список. Я пытаюсь изменить алфавитные символы в b
относительно их индексов в a
, не меняя неалфавитные символы при вводе пользователей.
alphabet=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
a=input("Please enter a string: ")
b=list(a)
f=[]
for elem in b:
if elem in alphabet:
c=alphabet.index(elem)
d=(len(alphabet)-c)
e=alphabet[d-1]
f.append(e)
mystring=''.join(f)
print(mystring)
Я ожидаю, что вывод abc123 будет zyx123
Только zyx, потому что я определяю f, у которого нет 123
Вы не получаете 123, потому что его нет в алфавитном списке.
вы можете использовать регулярное выражение и разделить поле на два (числовое и алфавитное), сохранить кортежи, если хотите сохранить их позиции, запустить циклы и добавить списки
Вам просто не хватает оператора else, когда elem
нет в алфавите.
if elem in alphabet:
...
else:
f.append(elem)
Рассмотрите возможность использования maketrans
и str.translate
, которые, кажется, точно соответствуют тому, что вы делаете:
intab = "abcdefghijklmnopqrstuvwxyz"
outtab = intab[::-1]
trantab = str.maketrans(intab, outtab)
str = "abc123";
print (str.translate(trantab))
>> zyx123
В приведенном выше примере переменная outtab
— это просто переменная intab в обратном порядке с использованием синтаксиса нарезки Python [::-1]
Maketrans преобразует все символы в одном списке в эквивалентно расположенные символы в другом списке. Любые символы, не входящие в первый список, остаются нетронутыми.
Какой результат вы получаете сейчас?