gpt4 book ai didi

Python:替换字符串中的特定字符(重复问题)

转载 作者:行者123 更新时间:2023-12-02 02:47:41 24 4
gpt4 key购买 nike

我有一个程序代码,该程序将字符串中的字符替换为上标字符,每次跳转 1 个字符。

不在我的字典中的字符应该被跳过,但也会影响下一个字符是否被替换(因此,如果“not-in-dict-character”应该被替换,它会被跳过,并且下一个字符不会被替换)替换,反之亦然)

应跳过空格而不改变下一个字符。

letters = { # My dictionary for all the letters and superscript versions
'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' : 'ᴬ',
'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' : 'ᶻ'
}

x = 0

while True:
text = input('Insert text: ')

while True:

# This will ask if the user wants something like 'aᵃaᵃaᵃaᵃ' or 'ᵃaᵃaᵃaᵃa'

fos = input('Do you want the first or the second letter to be small?(f/s): ')

if fos != 'f':
if fos != 's':
print('Please insert \'f\' or \'s\' (for first and second letters).\n')
else:
break
else:
break

if fos == 'f':
x = 1
elif fos == 's':
x = 2

for e in text:
if x % 2 == 0: # If x value is even, it skips this character
x = x + 1 # Makes the x value odd, so the next character isn't skipped
continue

elif e == ' ': # Ignoring blank spaces
continue

elif e not in letters: # Ignoring characters that are not in my dict
x = x + 1
continue

elif e in letters:
text = text.replace(e, letters[e], 1) # The third parameter is
x = x + 1

print(text)

问题是,如果替换函数尝试替换的字符在字符串中重复,它并不关心哪个字符是“e”,而只是替换字符串中的第一个字符。

因此,如果用户输入“abaaba”和“f”,结果将是“ᵃᵇᵃaba”,而它应该是“ᵃbᵃaᵇa”。有没有办法让替换对字符串中的哪个字符是e敏感?

最佳答案

str.replace,无论有没有第三个参数,在这里都不是正确的选择,因为它总是从单词的开头开始替换。相反,如果所有条件都适用(在字典中、在偶数/奇数位置等),您可以逐一迭代字符,并将它们替换为字典中的对应字符。

text = "Some Text"
k = 1
res = ""
for i, c in enumerate(text):
if c in letters and i % 2 == k:
res += letters[c]
else:
res += c

我不太明白你想如何处理字母中没有的空格和其他字符;您可能必须计算跳过的字符数,并在检查 i % 2 == k 时也考虑这些。

如果没有任何这样的“跳过”条件,您甚至可以将其变成单行:

res = ''.join(letters.get(c, c) if i % 2 == k else c for i, c in enumerate(text))

关于Python:替换字符串中的特定字符(重复问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62515400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com