1

I'm trying to create a script rewriting system so that after each iteration all A will change to B and all B will change to AB. The initial state is ABA so the first iteration should yield BABB but the code I have returns ABABAB. I'm really new to python as you can probably tell from my code below so if you could explain why what I'm doing is going so wrong that would be much appreciated as well

SRS = { 'a':'b', 'b':'ab'}
script = "aba"
for key in SRS:
    script = script.replace(key,SRS[key])
    print(script)
4

6 回答 6

3

在第一步中,您将 all 替换ab

"aba" -> "bbb"

然后替换bab

"bbb" -> "ababab"

如果你想用字符替换字符,你必须循环script

SRS = { 'a':'b', 'b':'ab'}
script = "aba"
result = ""
for ch in script:
    result += SRS[ch]
print(result)
于 2017-11-09T18:01:09.973 回答
1

您在这里遇到的问题script = script.replace(key,SRS[key])是运行在所有script变量上,而不是逐个字符。如果您逐个字符地运行替换,那么它可以工作:

SRS = { 'b':'ab', 'a':'b',}
script = "aba"
new_script = ''
for letter in script:    
    new_script += SRS[letter]
print(new_script)
于 2017-11-09T18:11:32.077 回答
1

这是因为您首先将 a 替换为 b ...所以您有“bbb”,然后将 b 替换为 ab,所以您得到了“ababab”

这是您需要的代码:

SRS = { 'a':'b', 'b':'ab'}
script = "aba"
script_replaced = ""
for character in script:
    script_replaced += SRS[character]

print(script)
print(script_replaced)

请注意,我们循环遍历字符串中的每个字符并替换为字典中的匹配项

于 2017-11-09T18:04:04.177 回答
0

鉴于这种:

SRS = { 'a':'b', 'b':'ab'}
script = "aba"

将所有的“a”替换为“b”后,则值为script“bbb”,将所有的“b”替换为“ab”后,得到“ababab”。

这是因为您按顺序执行替换,一个接一个,一个接一个。

如果要同时执行多个替换,则需要采用不同的方法。您可以使用re库的sub方法。

import re

SRS = {'a': 'b', 'b': 'ab'}
p = re.compile('|'.join(SRS.keys()))

script = 'aba'
print(p.sub(lambda x: SRS[x.group(0)], script))
# prints: babb
于 2017-11-09T18:04:04.937 回答
0

第一次迭代应该用“b”替换每个“a”。所以,

'aba' -> 'bbb'

第二次迭代应将每个 b 替换为“ab”。所以,

'aba' -> 'bbb' -> 'ababab'.

这正是您的代码正在做的事情。

>>> SRS = { 'a':'b', 'b':'ab'}
>>> script = "aba"
>>> for key in SRS:
...     script = script.replace(key,SRS[key])
...     print(script)
...
bbb
ababab
>>> 
于 2017-11-09T18:01:14.690 回答
0

那么你在循环中的第一次迭代是使用将'a'更改为'b',所以你会有

aba = bbb

然后第二个将 b 更改为 ab,所以你得到

bbb = ababab
于 2017-11-09T18:01:17.963 回答