想象一下,位于上图中轨道输入侧的四个铁路车辆,分别编号为1,2,3和4。假设我们执行以下操作序列(与图中箭头的方向兼容,并且不要求汽车“跳过”其他车辆):
由于这些操作,汽车的原始订单1234已更改为2431.
上面的操作可以通过代码SSXSSXXX更简洁地描述,其中S代表将汽车从输入移动到堆栈中,X代表将汽车从堆栈移动到输出中。 S和X的某些序列指定无意义的操作,因为在指定的轨道上可能没有可用的汽车;例如,序列SXXSSXXS无法执行。 (试试看为什么。)
编写并测试模拟火车车厢切换的功能: #[import statements] import q2_fun
# [constants]
# [rest of program code]
cars = [1, 2, 3, 4]
s_x = input("enter a code with s's and x's to move one stack to another")
list1 = q2_fun.train_swicth(cars, s_x)
print(list1)
from stack_array import Stack
def train_swicth(cars, s_x):
s = Stack()
list1 = []
for i in range(len(s_x)):
if s_x[i] == "s":
a = s_x.append()
s.push(a)
elif s_x[i] == "x":
b = s.pop()
list1.append(b)
return list1
我一直得到[]作为回报,它应该是2431与ssxssxxx。我可以得到一些帮助吗?
答案 0 :(得分:0)
如果我理解你就可以做到:
def train_swicth(cars, s_x):
i=0
s=[]
out=[]
for c in s_x:
if c=="s":
s.append(cars[i])
i+=1
elif c=="x":
out.append(s.pop())
return out
因为列表可以用作堆栈,并附加为push-operation