这个在python中的旋转程序有什么问题?

时间:2012-07-12 20:46:20

标签: python rotation

context :(谜机)我想要做的就是让这段代码运行,这样每次序列通过第一个轮子时第一个轮子就会旋转。

问题是我在互联网上使用下面的序列计算了如何进行旋转但是当我更改变量时它不能正常工作,以便它可以自动更多。它在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

由于

1 个答案:

答案 0 :(得分:5)

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

为了放置一些上下文,deque与列表非常相似,但它的优化方式使您可以轻松(高效)地在两端添加和删除项目,这对于构建来说效率稍高一些-in列表。 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]