1

最近、edX の MIT クラスで Python の学習を開始しました。

ただし、特定の演習で問題が発生しています。ここにそれらの1つがあります:

「タプルを入力として受け取り、出力として新しいタプルを返す、oddTuples というプロシージャを作成します。ここで、入力タプルの他のすべての要素がコピーされ、最初の要素から始まります。したがって、test がタプル ('I', 'am', 'a', 'test', 'tuple') の場合、この入力でoddTuples を評価すると、タプル ('I', 'a', 'tuple') が返されます。"

講義によると、正しいコードは次のとおりです。

def oddTuples(aTup):
   '''
   aTup: a tuple

   returns: tuple, every other element of aTup.
   '''
    # a placeholder to gather our response
    rTup = ()
    index = 0

    # Idea: Iterate over the elements in aTup, counting by 2
    #  (every other element) and adding that element to
    #  the result
    while index < len(aTup):
        rTup += (aTup[index],)
        index += 2

    return rTup

ただし、次のコードを使用して、別の方法で自分で解決しようとしました。

def oddTuples(aTup):
    '''
   aTup: a tuple

   returns: tuple, every other element of aTup.
   '''
    # Your Code Here
    bTup=()
    i=0
    for i in (0,len(aTup)-1):
        if i%2==0:
            bTup=bTup+(aTup[i],)
            print(bTup)
        print(i)
        i+=1
    return bTup

ただし、私のソリューションは機能せず、その理由を理解できません (チューターが提供するコードと本質的に同じことを行う必要があると思います)。

4

5 に答える 5

3

この問題のPythonicソリューションは、ステップ幅のあるスライスを使用し、次のとおりであることを追加したいだけです。

newTuple = oldTuple[::2]

oldTuple[::2]意味: start (値は省略) から end (省略) までの oldtuple のコピーを spepwidth 2 で取得します。

于 2012-10-16T18:27:24.317 に答える
2

ここで問題が発生したと思います。

for ループでは、次の 2 つの固定値を指定しますi

0
len(aTup)-1

本当に欲しいのは から までの値の範囲0ですlen(aTup)-1:

0
1
2
...
len(aTup)-1

開始値と終了値を範囲内のすべての値に変換するには、Python のrangeメソッドを使用する必要があります。

for i in range(0,len(aTup)-1):

(実際にrange のドキュメントを調べると、 という 3 番目のパラメーターがあることがわかりますskip。これを使用すると、関数は無関係になります :))

于 2012-10-16T18:24:07.217 に答える
1

for i in (0,len(aTup)-1):i+=1は、あなたが望むことを完全に行っていません。他の回答と同様に、おそらくfor i in range(0,len(aTup)-1):(insert ) が必要ですが、-構造が iterable の各項目に順番に値を設定するため、rangeも削除したいと考えています。i+=1forini

于 2012-10-16T18:25:30.110 に答える
1

コードは次のようになります。

for i in range(0,len(aTup)):
# i=0, 1, 2 ..., len(aTup)-1.

それよりも

for i in (0,len(aTup)-1):
# i=0 or i=len(aTup)-1.
于 2012-10-16T18:24:03.063 に答える