我试图在python中创建一种可发音的加密语言。我想迭代一个字符串并改变,只是一些元音。
我认为这可以通过数组chars["a","o"]
完成,其中第一个字母应该替换为第二个字母。
我正在尝试使用此代码。
import string
string = "Hello, my name is fesker"
chars =[
["a","o"],
["e","i"],
["i","u"],
["o","e"],
["u","a"],
["H","J"],
]
for i in range(len(string)):
print(string[i])
replaced=False
for x in range(len(chars)):
if string[i] in chars[x][0] and replaced == False:
string = string.replace(string[i],chars[x][1])
replaced=True
print("Replace",chars[x][0],"with",chars[x][1])
print(string)
我不明白这一点,我认为函数应该是正确的但是字符串替换给了我不同的输出。最后一句应该被理解为" Jille,我的名字我们fosker"
但是python shell给了我那个" Jelle,我的neme es fesker":
H
Replace H with J
e
Replace e with i
l
l
o
Replace o with e
,
m
y
n
a
Replace a with o
m
i
Replace i with u
u
Replace u with a
s
f
a
Replace a with o
s
k
o
Replace o with e
r
Jelle, my neme es fesker
我做错了什么?
答案 0 :(得分:1)
一线解决方案:
print(''.join(char.get(s, s) for s in string))
如果:
string = "Hello, my name is fesker"
char={"a":"o","e":"i","i":"u","o":"e","u":"a","H":"J"}
详细解决方案:
我对您的代码有一些建议:
请勿在{{1}}使用它来替换所有匹配的字符
.replace()
Use dict instead of list there if you want key,value pair.
如果你想修改它,可以在列表中转换字符串,因为字符串是不可变的。
char={"a":"o","e":"i","i":"u","o":"e","u":"a","H":"J"}
以下是您的解决方案,并进行了一些修改:
string=list(string)
输出:
string = "Hello, my name is fesker"
char={"a":"o","e":"i","i":"u","o":"e","u":"a","H":"J"}
string=list(string)
for index,item in enumerate(string):
for key,value in char.items():
if item==key:
string[index]=value
print("".join(string))
答案 1 :(得分:1)
您的问题:
string = string.replace(string[i],chars[x][1])
< - 这将替换所选字母的所有实例。因此,在字符串"Hello"
中,字母'e'
进入此轮次'e' -> 'i' -> 'u' -> 'a' -> 'o' -> 'e'
,因此它似乎未更改,但实际上已更改了5次。
可能的解决方案:
使用“Hello”示例将“e”替换为“i”:
如果您只想替换n个出现的字母,可以使用.replace()
的第3个参数,可以是.replace("e", "i", 1)
。注意:这可能是最糟糕的解决方案,但我提到它让您了解.replace()
的工作原理。
您可以在循环中替换一个字符。在下面的示例中,当然会将数字1和2替换为i
和i + 1
之类的内容。如果选择此解决方案,请记住,当您遍历字符串或数组时,您将检查每个字母以查看是否需要先替换它。如果需要更换,请使用O(1)查找(使用哈希字典)查找替换字符,然后使用以下示例之一替换。
代码:
string = "{}{}{}".format(string[:1], "i", string[2:])
代码:
string = list(string)
# or string = [i for i in string]
# ["H", "e", "l", "l", "o"]
string[1] = "i"
# ["H", "i", "l", "l", "o"]
string = "".join(string)
# "Hillo"
''.join(char.get(s, s) for s in string)
答案 2 :(得分:0)
string = "Hello, my name is fesker"
chars ={
"a": "o",
"e": "i",
"i": "u",
"o": "e",
"u": "a",
"H":"J",}
res_string = ""
for char in string:
res = char
if char in chars.keys():
res = chars[char]
res_string += res
print(res_string)
这是另一种解决方案。