问题:
创建一个函数replaceCharAtPos(orig,pos(,它接收两个输入参数,一个字符串(orig(和一个正整数(pos(。
如果数字是字符串中的一个位置,则函数应返回一个新字符串。新字符串应该是原始字符串,除了位置pos中的原始字符之外,它本身应该有位置号(如果位置号有1个以上的数字,则该字符应该被位置号的单位部分中的数字替换,例如,如果位置号是12,则为2(。
如果数字pos不是原始字符串orig中的有效位置,则返回的字符串应与原始字符串完全相同。
应输入和输出的内容示例:
print (replaceCharAtPos("abcd",2))
这给出了输出ab2d,因为数字2对应于字符串的索引位置2(索引从0开始(,所以它取代了"abcd"的"c">
我的代码出现问题:
def replaceCharAtPos(orig,pos):
if pos >= (len(orig)):
return orig
orig = list(orig)
orig[pos] = str(pos)
return ''.join(orig)
当放入一个两位数的数字时,例如12,新字符串应该取12的第二个/LAST-数字,即2。查看下面查看我的代码问题:
print (replaceCharAtPos('abcdefghijklmn',12))
我得到的输出是abcdefghijkl12n
,但应该是abcdefghijkl2n
。如何解决此问题?我尝试过将str(pos)
更改为str(pos[-1])
,但不起作用。
感谢
您可以在参数的转换索引中使用[-1]
索引,以确保在提供的数字超过1位时始终使用最后一位。你几乎得到了正确的结果,但你做str(pos[-1])
的方式是,你试图切片pos
,它是一个integer
,而不是转换后的str
。
In [10]: def replace_char_at_idx(orig, idx):
...: if idx >= (len(orig)):
...: return orig
...: orig = list(orig)
...: # Take always the last digit from the CONVERTED
...: orig[idx] = str(idx)[-1]
...: return ''.join(orig)
In [11]: replace_char_at_idx("abcdefghijklmn", 12)
Out[11]: 'abcdefghijkl2n'