2016-06-08 66 views
-1

任务是:为什么Python中的我的front_back程序不工作?

给定一个字符串,返回其中第一个和最后一个字符都被更换一个新的字符串。

def front_back(str): 

    if len(str)<=0: 
    return str 

    else: 
    front=str[0] 
    back=str[-1] 
    new = str.replace(str[0], back) 
    print new 
    new_2=new.replace(new[-1], front) 
    print new_2 

front_back("code") 
+0

什么问题? –

+0

欢迎来到StackOverflow。看起来你已经有了自己的学校作业,需要一些帮助?我建议你问你的老师,或者在你的学习材料中查找它,而不是在interwebz上钓鱼。但是如果你打算这么做的话,请解释哪部分代码不适合你,期望的行为是什么,甚至可能是堆栈跟踪显示你遇到的错误,最重要的是**:我试图解决这个问题。 – Torxed

+0

问题出在第二个'replace':它代替了所有的字符,而不仅仅是最后一个。 –

回答

2

为什么?

它不会起作用,因为.replace()将替换字符的所有匹配,不一定只有第一个和最后一个

下面是构建与第一,身体和最后部分字符串的解决方案

text = 'code' 
first, body, last = text[0], text[1:-1], text[-1] 
result = last + body + first 
# 'eodc' 
1

字符串文字可切片加入

>>> s = "hello world" 
>>> s[-1] + s[1:-1] + s[0] 
'dello worlh' 

P.S. str是python中的内建函数,因此将它用作变量名是个坏主意。

0

首先,从不调用变量str。为什么?因为这是Python字符串类的名称。如果你使用相同的名字,那么你就会丢掉它。我用txt

你的长度测试是合理的,但下限可以增加(单个字符将是愚蠢的)。

但是使用str.replace()是不可行的。为什么?那么它可以在你的测试用例中起作用,但只是因为每个字符都是唯一的。 str.replace()替换出现指定的字符串。所以如果第一个或最后一个字符在其他地方重复,那么这个字符也会改变。

您可以使用切片,其中第一个(最左边的)字符为0(零)。您还可以使用负数索引右侧,因此-1是最后一个(最右侧)的字符。角色的范围从开始到最后一个角色。所以[1:-1]从第二个字符到最后一个字符。

def front_back(txt): 

    if len(txt) <= 1: 
    return txt 
    else: 
    new_txt = txt[-1] + txt[1:-1] + txt[0] 
    return new_txt 

print front_back("code") 

我在函数中使用return,因为这将是处理文本的正常方式,那就是要求你的问题。

相关问题