python中的字符串方法

时间:2013-09-30 19:34:36

标签: python string indexing

我需要有关如何在字符串上定义和测试三个函数的帮助。遵循这些准则。这是我周三的考试复习,并且非常希望得到正确的解决方案,因为我的所有问题都会出现语法错误。

我需要按照下面列出的要求提出所有三个示例的代码。

不使用任何字符串方法len函数和字符串操作+*,索引切片和==来比较字符串或字符。

repl函数中,使用累加器模式构建新字符串。

实施例

  1. ends函数接受一个字符串作为参数;如果字符串有两个或多个字符,则返回一个字符串,该字符串由给定字符串的第一个和最后一个字符组成;否则,它返回给定的字符串。

    >>> ends("ab")
    'ab'
    >>> ends("abc")
    'ac'
    >>> ends("a long sentence")
    'ae'
    >>> ends("")
    ''
    >>> ends("*")
    '*'
    
  2. butends函数接受一个字符串参数;如果字符串有两个或多个字符,则返回一个字符串,该字符串除了字符串的第一个和最后一个字符外;否则,它返回给定的字符串。

    >>> butends("abcde")
    'bcd'
    >>> butends("abc")
    'b'
    >>> butends("a long sentence")
    ' long sentenc'
    >>> butends("")
    ''
    >>> butends("a")
    'a'
    
  3. repl函数有三个参数:

    • old是一个字符;
    • new是一个包含0个或多个字符的字符串;
    • s是任何字符串。

    我知道它会返回一个新字符串,该字符串是通过用new替换s中old的每一个出现而形成的。

    >>> repl('a', 'A', 'fast faces react snappily')
    'fAst fAces reAct snAppily'
    >>> repl('*', '+++', 'a*b = c*d')
    'a+++b = c+++d'
    >>> repl(' ', '\n', 'Practice every day.')
    'Practice\nevery\nday.'
    >>> print(repl(' ', '\n', 'Practice every day.'))
    Practice
    every
    day.
    >>> repl(",", ":", "a,b,cde,fghi")
    'a:b:cde:fghi'
    
  4. 到目前为止我对第3部分的了解是:

     def repl(old, new, s):
         newStr = ""
         for ch in s:
             if ch != old:
                 newStr = newStr + ch
             else:
                 newStr = newStr + new
         return newStr
    

    上面列出的代码不会替换正确的字符我不知道哪里出错了。

4 个答案:

答案 0 :(得分:1)

  1. 如果您可以使用len()并切片,最好只是抓住 第一个和最后一个字符并返回。

    def ends(input):
        if len(input) < 2:
            return input
        else:
            return input[0] + input[-1]
    
  2. 你可以在这里做同样的事情:

    def butends(input):
        if len(input) < 2:
            return input
        else:
            return input[1:-1]
    
  3. 对于这个,Python中有一个名为replace的函数,但我是 不确定你可以使用它。

    def repl(old, new, input):
        return input.replace(old, new)
    
  4. 如果你不能,那么只需循环输入并在每个字符与new匹配时替换它。

答案 1 :(得分:1)

这是三种功能的一种可能解决方案。请注意,正如我在评论中提到的那样,如果您向我们展示您尝试过的内容以及它们存在的问题,您将会学到更多。

def ends (s):
    if len(s) > 2:
        return s[0] + s[-1]
    else:
        return s

def butends (s):
    if len(s) > 2:
        return s[1:-1]
    else:
        return s

def repl (find, replacement, s):
    newString = ''
    for c in s:
        if c == find:
            newString += replacement
        else:
            newString += c
    return newString

答案 2 :(得分:0)

1)

def ends(s):
    if len(s)<=2: return s
    return s[0]+s[-1]

2)

def butends(s):
    if len(s)<=2: return s
    return s[1:-1]

3)

def repl(s,old,new):
    return s.replace(old,new)

答案 3 :(得分:0)

我喜欢编程作业:

def ends (s): return s [0] + s [-1] if len (s) > 1 else s
def butends (s): return s [1:-1] if len (s) > 1 else s
def repl (a, b, c, acc = ''): return acc if not c else repl (a, b, c [1:], acc + (b if c [0] == a else c [0] ) )

不确定“累加器模式”是什么,所以对于替换,我使用了函数式编程已知的累加器的递归函数。