1

コンテキスト:(エニグママシン)私がやろうとしているのは、シーケンスが最初のホイールを通過するたびに最初のホイールが回転するように、このコードを実行することです。

問題は、インターネットから以下のこのシーケンスを使用して回転を行う方法を考え出したのに、変数を変更してさらに自動化できるようにすると機能しないことです。関数の後にエラーメッセージが表示されますif。変数の名前と間隔を単純化するために、変数の名前を確認して変更しました。そして、コードで機能していないものを見つけることができません。回転関数が変数を使用できないのは何ですか?

import collections

theinput=raw_input('enter letter')
x=0



w=collections.ww=([1,2,3,4,5])


if theinput == 'a':
    w.rotate(x)
    a = w[0]
    x= x+1
    w.rotate(x)
 print a

ありがとう

4

1 に答える 1

5

コレクションモジュールにwwのような変数がないことを私が知っている限り、おそらく使用したいコンテナはdequeです。

少しコンテキストを言えば、dequeはリストに非常に似ていますが、両端でアイテムを簡単に(効率的に)追加および削除できるように最適化されています。これは、組み込みリストよりもわずかに効率的です。 。また、dequesは、rotateなど、リストにはないいくつかの追加メソッドを提供します。基本的な操作を組み合わせたリストを使用して同じことを行うのは本当に簡単ですが、これらの種類のことには最適化されていませんが、両端キューは最適化されています。しかし、エニグママシンのシミュレーションのような単純なものの場合、リストに固執してもパフォーマンスはそれほど変わりません。

私はあなたが次のようなことをしようとしていると思います:

import collections
w = collections.deque([1, 2, 3, 4, 5])
print "Deque state is ", w
print "First item in deque is", w[0]
w.rotate(1)
print "Deque state after rotation is ", w
print "First item in deque is", w[0]

これは印刷する必要があります

Deque state is  deque([1, 2, 3, 4, 5])
First item in deque is 1 Deque
state after rotation is  deque([5, 1, 2, 3, 4])
First item in deque is 5

回転の引数として負の数を使用して、反対方向に回転します

以下は、組み込みリストのみを使用した代替実装です。

w = [1, 2, 3, 4, 5]
print "List state is ", w
print "First item in list is", w[0]
x = 1 # x is rotation
w0 = w[:-x]
w = w[-x:]
w.extend(w0)
print "List state after rotation is ", w
print "First item in list is", w[0]
于 2012-07-12T21:06:22.483 に答える