Сопротивление стека - PullRequest
0 голосов
/ 01 декабря 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)

    def __str__(self):
        return '\n'.join('{} - {}'.format(n, thing) for n, thing in enumerate(self.container, 1))



s = Stack()
s.isEmpty()
s.push("Coke")
s.push("Pepsi")
s.push("Ice Lemon Tea")
s.push("Mountain Dew")
s.push("Green Tea")
s.push("Root Beer")
s.push("Red Bull")
print(s)

for i in range(0, s.size()):
    print (str(i+1) + " - " + s.container[i])

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

Вот мои коды для генерации 3 случайных напитков из стопки из 7 напитков.После получения 3-х рандомизированных напитков мне хотелось бы узнать, как я могу восстановить свою стопку.

Например, мои выходные данные для 3-х случайных напитков:

Pepsi
Mountain Dew
Red Bull

Как распечататьиз 4 оставшихся напитков в стеке вот так:

1 - Coke
2 - Ice Lemon Tea
3 - Green Tea
4 - Root Beer

1 Ответ

0 голосов
/ 01 декабря 2018

Добавьте метод __str__ в класс, который будет создавать список, а затем просто напечатайте экземпляр

class Stack:
    ...
    def __str__(self):
        return '\n'.join('{} - {}'.format(n, thing) for n, thing in enumerate(self.container, 1))
        # use an f-string for python 3.6+
        # return '\n'.join(f'{n} - {thing}' for n, thing in enumerate(self.container, 1))

...

В вашем примере кодавы вытаскиваете предмет из стека, даже если он не соответствует вашим критериям - просто закомментируйте предложение else

s = Stack()
# push stuff onto s

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

>>> print(s)
1 - Coke
2 - Pepsi
3 - Ice Lemon Tea
4 - Mountain Dew
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...