Генератор случайных чисел, использующий структуру данных стека - PullRequest
0 голосов
/ 28 ноября 2018
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")

Это мои коды, использующие стек.У меня возникают проблемы при попытке создать код, который может случайным образом генерировать только 3 из 8 животных в качестве выходных данных, используя только структуру данных стека.

Пример вывода:

Dog
Snake
Tiger

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете установить случайное число как число 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())
0 голосов
/ 28 ноября 2018

Создайте индексы все сразу, затем вытолкните элементы один за другим и выведите их в позиции индекса:

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()

РЕДАКТИРОВАТЬ (ответить на последующий вопрос из комментариев):

Чтобы выбрать одного из трех выбранных животных, поместите каждого из них во второй стек в первом цикле.Во втором цикле повторите тот же процесс, только с измененными параметрами (выберите 1 из 3 вместо 3 из 8):

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()
...