在下面的Python代码中,我正在破译一条理论上应该导致就绪的消息,set输出str.replace()的两行显然没有按预期执行,因此只替换了单词的第二个字符:
# 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的每个单词的最后一个字符替换了第二个字母。
发布于 2022-01-24 21:43:19
考虑一下字符串:
Ryade如果将last_letter (e)替换为second_letter (y),则会得到:
Ryady现在,如果将second_letter (y)替换为last_letter (e),则可以得到:
Reade所有的y都被e取代了。
为了解决这个问题,您可以引入占位符字符(作为许多选项之一):
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输入将采取以下步骤:
Ryed^Read^Ready从我下面的评论中,你可能会有更好的成功,因为你在单词中使用它的位置(在替换掉第一个字母之后),你可能会更有策略地选择你要替换的字符。可能有更漂亮的方法可以做到这一点,但这似乎是一个合理的方向:
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))https://stackoverflow.com/questions/70840649
复制相似问题