使用堆栈数据结构的随机生成器

时间:2018-11-28 08:22:59

标签: python random stack

class Stack:
     def __init__(self):
         self.container = []  

     def isEmpty(self):
         return self.size() == 0   

     def push(self, item):
         self.container.append(item)  

     def peek(self) :
         if self.size()>0 :
             return self.container[-1]
         else :
             return None

     def pop(self):
         return self.container.pop()

     def size(self):
         return len(self.container)

s = Stack()
s.isEmpty()
s.push("Cat")
s.push("Dog")
s.push("Horse")
s.push("Snake")
s.push("Lion")
s.push("Fish")
s.push("Bear")
s.push("Tiger")

这些是我使用堆栈的代码。我在尝试提出一种代码时遇到问题,该代码只能使用堆栈数据结构来随机生成8种动物中的3种作为输出。

输出示例:

Dog
Snake
Tiger

2 个答案:

答案 0 :(得分:0)

一次生成所有索引,然后一一弹出元素并将其输出到索引位置:

import random
sample = random.sample(range(s.size()), 3)
for i in range(s.size()):
    if i in sample:
        print(s.pop())
    else:
        s.pop()

编辑(通过评论回复后续问题):

要选择三个所选动物中的一个,请将它们中的每一个推入第二个堆栈的第一个循环中。在第二个循环中,重复相同的过程,仅更改参数(从3中选择1而不是8中选择3):

import random
sample = random.sample(range(s.size()), 3)
s2 = Stack()
for i in range(s.size()):
    if i in sample:
        animal = s.pop()
        s2.push(animal)
        print(animal)
    else:
        s.pop()

index = random.randint(0, s2.size() - 1)
for i in range(s2.size()):
    if i == index:
        animal = s2.pop()
        print(animal)
    else:
        s2.pop()

答案 1 :(得分:0)

您可以设置一个随机数作为要执行的pop()操作次数

import random
for i in range(3):
    rand = random.randint(0, s.size()-(3-i)) # maximum number of pop is the length of stack - (3-i)
    for j in range(rand-1): # pop rand-1 times
        s.pop()
    print(s.pop())