-5

我需要有关如何在字符串上定义和测试三个函数的帮助。遵循这些准则。这是我周三考试的复习,​​我真的很想有正确的解决方案,因为我的都带着语法错误回来了。

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

在不使用任何字符串方法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是任何字符串。

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

    >>> 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'
    

到目前为止,我对第 3 部分的了解是:

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

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

4

4 回答 4

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
于 2013-09-30T19:43:47.360 回答
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)
    

如果你不能,那么只需循环输入并在每个字符与新字符匹配时替换它。

于 2013-09-30T19:43:23.200 回答
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] ) )

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

于 2013-09-30T19:42:33.663 回答
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)
于 2013-09-30T19:38:38.830 回答