@egor_zenkin
новичок Python, немного могу в FL Studio

Почему при повторном вызов функции с методом pop( ) возвращает одно и тоже значение?

Здравствуйте! Создаю игру "пьяница", которая автоматически раздаёт карты игрокам и определяет победителя. Вот мой код:
card.py
"""карта"""

class Card:
	suits = ["пикей","червей","бубей","треф"]
	values = [None, None, "2", "3", "4", "5",
			  "6", "7", "8", "9", "10",
			  "валета", "даму", "короля", "туза"] 
	"""в values первые 2 None для удобной индексации
	аля 10=10, 11=Валет, 14=Туз и т.д. """
	
	def __init__(self, v, s):
		"""suit и value - целые числа"""
		self.value = v
		self.suit = s
		
	def __lt__(self, c2):
		if self.value < c2.value:
			return True
		if self.value == c2.value:
			if self.suit < c2.suit:
				return True
			else:
				return False
			
	def __gt__(self, c2):
		if self.value > c2.value:
			return True
		if self.value == c2.value:
			if self.suit > c2.suit:
				return True
			else:
				return False
		
	def __repr__(self):
		""" ex: тройка треф, валет червей """
		v = self.values[self.value] + " " \
		+ self.suits[self.suit]
		return v


deck_of_card.py

""" Колода карт """

from random import shuffle, SystemRandom, randint, choice

from card import Card

class Deck:
	def __init__(self):
		self.cards = []
		for i in range(2,15):
			for j in range(4):
				self.cards.append(Card(i,j)) 
		shuffle(self.cards) 
	
	"""ГДЕ-ТО ЗДЕСЬ, Я ДУМАЮ, ОШИБКА """
	def rm_card(self):
		""" даёт игроку последнюю карту из колоды """
		if len(self.cards) == 0:
			return
		return self.cards.pop()
		# пробовал self.cards.pop(self.cards.index(choice(self.cards)))


player.py

class Player:
	""" Игрок имеет имя
	побед по умолчанию - 0
	карты пока что нет """
	def __init__(self, name):
		self.wins = 0
		self.card = None
		self.name = name


game.py
"""Игра пьяница"""

from card import Card
from deck_of_cards import Deck
from player import Player

class Game:
	def __init__(self):
		name1 = input('имя игрока 1: ')
		name2 = input('имя игрока 2: ')
		self.deck = Deck() # получаем тасованную колоду карт
		self.p1 = Player(name1) 
		self.p2 = Player(name2)
		
	def wins(self, winner):
		w = "{} забирает карты"
		w = w.format(winner)
		print(w)
		
	def draw(self, p1n, p1c, p2n, p2c):
		d = "{} кладет {}, а {} кладёт {}"
		d = d.format(p1n, p2c, p2n, p2c)
		print(d)
		
	def winner(self, p1, p2): 
			"""определяет победителя"""
			if p1.wins > p2.wins:
				return p1.name
			if p2.wins < p2.wins:
				return p2.name
			if p1.wins == p2.wins:
				p = "Ничья! Никто не"
				return p
				
	def play_game(self):
		cards = self.deck.cards
		print("Let's go!")
		m = """Нажмите X для выхода. 
Нажмите любую другую клавишу для начала игры. """
		response = input(m)
		if response.upper() == 'X':
			return
		while len(cards) >= 2:
			p1c = self.deck.rm_card() # берёт последнюю карту из колоды
			p2c = self.deck.rm_card() # БЕРЁТ ПРЕДЫДУЩУЮ КАРТУ ПОЧЕМУ ТО
			p1n = self.p1.name
			p2n = self.p2.name
			self.draw(p1n, p2c, p2n, p2c) #вызов метода draw внутри класса
			if p1c > p2c:
				self.p1.wins += 1
				self.wins(self.p1.name) #вызов метода wins внутри класса
			elif p1c < p2c:
				self.p2.wins += 1
				self.wins(self.p2.name)
		win = self.winner(self.p1, self.p2)
		
		print ("Игра окончена. {} выиграл".format(win))
						
game1 = Game()
game1.play_game()


При создании игры игрокам раздаются одни и те же карты, хотя метод pop() при каждом вызове должен возвращать отличное от предыдущего значения.
5dbfd7ef27940345696281.png

Помогите, пожалуйста, разобраться, в чём проблема?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
@o5a
self.draw(p1n, p2c, p2n, p2c)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@spaiki007
for i in range(2,15):
      for j in range(4):
        self.cards.append(Card(i,j))


А это че такое у тебя, проверял что за массив у тебя получается?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
17 февр. 2020, в 19:40
500 руб./за проект
17 февр. 2020, в 19:36
5000 руб./за проект
17 февр. 2020, в 19:27
200 руб./в час