首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >str.replace(last_letter,second_letter)和替换(second_letter,last_letter)只导致其中一个执行

str.replace(last_letter,second_letter)和替换(second_letter,last_letter)只导致其中一个执行
EN

Stack Overflow用户
提问于 2022-01-24 21:22:04
回答 1查看 69关注 0票数 1

在下面的Python代码中,我正在破译一条理论上应该导致就绪的消息,set输出str.replace()的两行显然没有按预期执行,因此只替换了单词的第二个字符:

代码语言:javascript
复制
# Input:
# 82yade 115te 103o
#
# Output:
# Ready set go
user_input = input().split(" ")
first_letter = ''
second_letter = ''
last_letter = ''
printable_list = []
ord_char = ''
final_str = ''
concat_str = ''
for word in user_input:
    final_str = ''
    first_letter = ''
    last_letter = ''
    ord_char = ''
    concat_str = ''
    for idx in range(0, len(word)):
        if word[idx].isdigit():
            first_letter = word[idx]
            ord_char += first_letter
        else:
            final_str += word[idx]
    concat_str = chr(int(ord_char)) + final_str
    second_letter = concat_str[1]
    last_letter = concat_str[len(concat_str) - 1]
    print(second_letter, last_letter) # this prints here only for debugging purposes, e.g. to check 2nd and last letter
    concat_str = concat_str.replace(last_letter, second_letter)
    concat_str = concat_str.replace(second_letter, last_letter)
    printable_list.append(concat_str)
print(' '.join(printable_list))

因此,我希望推出的是“准备就绪的围棋”(Reade see Go)。是什么导致第二次更换出现故障?

我试图实现的是,第二个字母和最后一个字母被切换(例如,Holle表示Hello),第一个字母被它的字符代码(例如,72表示H)替换为字符代码(例如,72表示H),直到我用添加到printable_list的每个单词的最后一个字符替换了第二个字母。

EN

回答 1

Stack Overflow用户

发布于 2022-01-24 21:43:19

考虑一下字符串:

代码语言:javascript
复制
Ryade

如果将last_letter (e)替换为second_letter (y),则会得到:

代码语言:javascript
复制
Ryady

现在,如果将second_letter (y)替换为last_letter (e),则可以得到:

代码语言:javascript
复制
Reade

所有的y都被e取代了。

为了解决这个问题,您可以引入占位符字符(作为许多选项之一):

代码语言:javascript
复制
placeholder = '^'    
concat_str = concat_str.replace(last_letter, placeholder)
concat_str = concat_str.replace(second_letter, last_letter)
concat_str = concat_str.replace(placeholder, second_letter)

根据这一逻辑,我们的Ryade输入将采取以下步骤:

  1. Ryed^
  2. Read^
  3. Ready

从我下面的评论中,你可能会有更好的成功,因为你在单词中使用它的位置(在替换掉第一个字母之后),你可能会更有策略地选择你要替换的字符。可能有更漂亮的方法可以做到这一点,但这似乎是一个合理的方向:

代码语言:javascript
复制
import re 
user_input = input().split(" ")
printable_list = []
for word in user_input:    
    word = word.replace(re.findall('^[0-9]*', word)[0], chr(int(re.findall('^[0-9]*', word)[0])))    
    if len(word) > 2:
        word = word[0] + word[len(word) - 1] + word[2:len(word)-1] + word[1]
    printable_list.append(word)
print(' '.join(printable_list))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70840649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档