给定一个字符串,返回其中第一个和最后一个字符都被更换一个新的字符串。
front_back('code') → 'eodc'
front_back('a') → 'a'
front_back('ab') → 'ba'
以上是提供www.codingBat.com我试图解决以下的问题之一是我写了这样做的代码。
def front_back(str):
str = list(str)
first = [str[0]]
last = [str[-1]]
middle = str[1:-1]
print ''.join (last + middle + first)
下面这段代码似乎当我在我的电脑上的Python 2.7运行它,但代码蝙蝠我碰到下面的错误运行时,它才能正常工作:“错误:列表索引超出范围”
现在,我想我的这个错误是什么意思一个不错的主意,但我不明白为什么我得到它由于这样的事实,我引用任何索引基本上保证在至少2个字符的字符串。
你可能得到了一个空字符串(IndexError
)的''
作为str[0]
会超出范围,在这种情况下。由于写的,你的代码也将产生一个1个字符的字符串无效结果。为了解决这个问题,你可以return
原始的字符串,如果其长度<2。此外,它会更简单,速度更快使用字符切片:
def front_back(string):
if len(string) < 2:
return string
return string[-1] + string[1:-1] + string[0]
(作为一个方面说明,不要用str
一个变量名,因为它会遮蔽built-in str
功能)。
你的问题是1个字符,即。 front_back('a') → 'a'
。考虑你怎样才能调整功能来解释这一情况。
编辑:我不喜欢其他的答案的效率或通用性,所以我会后我下面的解决方案:
def front_back(str):
return ''.join([x if i not in [0,len(str)-1] else str[len(str)-i-1] for i,x in enumerate(str) ])
保持简单,避免特殊情况:
def front_back(string):
array = list(string)
array[0], array[-1] = array[-1], array[0]
return "".join(array)
我认为,该网站采用了一系列随机/伪随机字符,以确定您的代码给出正确的输出。如果是的话len() == 1
的字符串会错误地返回。即'h' return 'hh'
。我已经修改了代码来纠正。假设该网站还要求您返回的数据,而该打印我也占了点。祝好运!
def front_back(str):
if len(str) > 1:
str = list(str)
first = [str[0]]
last = [str[-1]]
middle = str[1:-1]
return ''.join (last + middle + first)
else:
return str
print front_back('h')