2016-06-15 19 views
-1

给定一个字符串,返回第一个和最后一个字符已交换的新字符串。用于交换字符串中第一个和最后一个字母的Python代码

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个字符的字符串中。

+1

'STR [1:-1]'会走出范围''a'',因为只有指数'[0]'和'[-1]'有效 – CoryKramer

+0

即使将[1]替换为[0],我也会得到同样的错误。我知道如果中间值等于索引范围,代码将无法正常工作,但是我的观点是它仍然给我列表索引超出范围错误。 – bob

+2

只需要注意一点:不要将属性命名为'str',因为它是Python中的内置函数,您可以使用'_str'代替 – MaThMaX

回答

1

你的问题是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) ]) 
2

你的功能,它会不会与1 - 字符串工作只是复制角色。你可以添加一个特殊的情况下这样的字符串:

def front_back(string): 
    if len(string) == 1: 
     return string 
    return string[-1] + string[1:-1] + string[0] 

作为一个侧面说明,不要用str一个变量名,因为它会遮蔽builtinstr功能。

+0

而不是添加特殊情况,这将是一个更好的主意重新设计功能,使其更通用。 – 0x5453

0

我假设网站使用一系列随机/伪随机字符来确定您的代码是否提供了正确的输出。如果是这样,那么一串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') 
+0

运行上面的代码替换我的时出现以下错误:错误:只能连接列表(不是“str”)列出我认为只是由于'中间'不是一个列表,所以我做了一个,现在我得到和以前一样的错误:“列表索引超出范围” – bob

+0

我不知道这个网站运行的是什么版本的python,但是这个代码在'python2,3'上完美工作。尽管如此,我已经改变了代码。 – TheLazyScripter

+0

这里是一个练习问题的链接,以防万一任何人想要尝试它:http://codingbat.com/prob/p153599 – bob

0

尽量简单,避免特殊情况:

def front_back(string): 
    array = list(string) 
    array[0], array[-1] = array[-1], array[0] 
    return "".join(array) 
相关问题