0

次の関数で少し問題が発生しています。単純なリスト メソッドを使用して、doc-string に示されている例を実現する方法を知りたいです。

# The values of the two jokers.
JOKER1 = 27
JOKER2 = 28


def triple_cut(deck):
  '''(list of int) -> NoneType
  Locate JOKER1 and JOKER2 in deck and preform a triple cut.\
  Everything above the first joker goes at the bottom of the deck.\
  And everything below the second joker goes to the top of the deck.\
  Treat the deck as circular.
  >>> deck = [1, 2, 27, 3, 4, 28, 5, 6, 7]
  >>> triple_cut(deck)
  >>> deck
  [5, 6, 7, 27, 3, 4, 28, 1, 2]
  >>> deck = [28, 1, 2, 3, 27]
  >>> triple_cut(deck)
  >>> deck
  [28, 1, 2, 3, 27]
  '''
  # obtain indices of JOKER1 and JOKER2
  j1 = deck.index(JOKER1)
  j2 = deck.index(JOKER2)
  # determine what joker appears 1st and 2nd
  first = min(j1, j2)
  second = max(j1, j2)
  # use slice syntax to obtain values before JOKER1 and after JOKER2
  upper = deck[0:first]
  lower = deck[(second + 1):]
  # swap these values
  upper, lower = lower, upper

int のリストを実行すると。27 と 28 を含む場合、この関数はリストに対して何もしません。何が問題なのかわからないのですが、助けてもらえますか?

4

3 に答える 3

1

次のように、ピースを再度貼り付ける必要があります。

deck[:] = deck[second + 1:] + deck[first: second + 1] + deck[:first]

これにより、デッキ全体が置き換えられます ( deck[:] = ...)。これは簡単です。あなた自身の責任でトリッキーになるようにしてください;-)

于 2013-11-05T01:56:45.720 に答える
0

さて、あなたはデッキの半分のコピーを作成し、それらが割り当てられている変数を変更しています (最初に希望した方法でそれらを割り当てる方が簡単だったでしょう)...そしてそれだけです。それらを元に戻すことはありません。また、(ジョーカーの間のカードの)中央のスライスもありません。

于 2013-11-05T01:46:45.600 に答える
0

スライスへの割り当ては、すぐに行う場合にのみ機能します。スライスを保存してから割り当てることはできません。

deck[(second + 1):], deck[0:first] = deck[0:first], deck[(second + 1):]
于 2013-11-05T01:48:42.803 に答える