0

私の最初のクラスを取っているpythonは初めてで、これまでのところ非常にうまくやっていますが、この問題は私を殺しています。

問題:

シーケンスの反転は、順不同のエントリのペアです。たとえば、文字 F と D は文字列 'ABBFHDL' の反転を形成します。これは、F が文字列の前にあり、アルファベットの後ろにあるためです。文字 H と D も反転を形成します。シーケンス内の反転の総数、つまり順不同のペアの数は、シーケンスがどの程度ソートされていないかの尺度です。'ABBFHDL' の反転の総数は 2 です。大文字の A から Z までのシーケンス (文字列) を取り、シーケンス内の反転の数を返す関数 inversions() を実装します。

私がこれまでに得たものは次のとおりです。

    def inversions(s):
        count = 0
        for i in range(len(s)):          # for each index i
            for j in range(len(s)):      # for each index J
                if s[j]>=s[i]:           # compare string[i] and string[j]
                    count += 0

                else:
                    count +=1
                    return count

そして、良い部分的なクレジットを得るには、ウサギの穴を十分に下っていません:(

これは私に1を与えるので、これは正しくありません(2である必要があります)。

私が疑問に思っているのは、これが現在大きなハードルになっているのですが、これを達成するためのコードの書き方です: # i より大きいインデックス j ごとに

いくつかのコードを試しましたが、うまくいきません。これらを試しました:

    for j in range(len(s)>i):        # the result i get is 1
    for j in range(len(s)<i):        # the result i get is 'blank
    for j in range(len(s)>s[i]):    # the result i get is this error message : 

    for j in range(len(s)>s[i]):
    TypeError: unorderable types: int() > str()

私が達成できないのは、シーケンス(文字列)内のすべての可能なペアを反復処理する関数を取得することです。

(つまり、AA、AB、AB、AF、AH、AD、AL、BB、BB、BF、BH、BD、BL、(これらのどれもカウントをレンダリングしません。ただし、反復が F に達すると、反転カウントが発生します。 FD、次に HD、したがって答え 2)

私は自分のコードでそこにたどり着くことができません。

4

3 に答える 3

1

すべての文字ペアを取得する方法は次のとおりです。

for i in range(len(s)):
    for j in range(i + 1, len(s)):
        print s[i], s[j]

カウント部分はお任せします!

于 2013-05-17T17:52:01.813 に答える