-5

文字列に対して 3 つの関数を定義してテストする方法について助けが必要です。これらのガイドラインに従ってください。これは水曜日の私の試験の復習であり、私のすべての構文エラーが戻ってくるため、正しい解決策を本当に望んでいます.

以下に示す要件に従って、3 つの例すべてのコードを作成する必要があります。

文字列メソッドのみを使用せずlenに機能し、文字列操作+*、インデックス付けスライス、および==文字列または文字の比較を行います。

関数ではrepl、accumulator パターンを使用して新しい文字列を作成します。

  1. このends関数は文字列を引数として取ります。文字列が 2 文字以上の場合、指定された文字列の最初と最後の文字で構成される文字列を返します。それ以外の場合は、指定された文字列を返します。

    >>> ends("ab")
    'ab'
    >>> ends("abc")
    'ac'
    >>> ends("a long sentence")
    'ae'
    >>> ends("")
    ''
    >>> ends("*")
    '*'
    
  2. このbutends関数は文字列引数を取ります。文字列に 2 つ以上の文字が含まれる場合、文字列の最初と最後の文字を除くすべての文字で構成される文字列を返します。それ以外の場合は、指定された文字列を返します。

    >>> butends("abcde")
    'bcd'
    >>> butends("abc")
    'b'
    >>> butends("a long sentence")
    ' long sentenc'
    >>> butends("")
    ''
    >>> butends("a")
    'a'
    
  3. repl 関数は次の 3 つの引数を取ります。

    • oldは単一の文字です。
    • new0 文字以上の文字列です。
    • 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

以下は、3 つの機能に対する 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 に答える
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 に答える