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

您可能想要使用的容器是deque,据我所知,在 collections 模块中没有 ww 这样的变量。

简单地说,双端队列与列表非常相似,但它经过优化,您可以轻松(有效地)在两端添加和删除项目,这比内置列表的效率略高. deques 还提供了一些列表中没有的附加方法,例如旋转。虽然用列表结合基本操作来做同样的事情真的很容易,但它们并没有针对这类事情进行优化,而 deques 是。但是对于像模拟 Enigma 机器这样简单的事情,坚持使用列表不会对性能产生太大影响。

我猜你正在尝试做类似的事情:

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 回答