Вот отрывок из моего задания, в котором содержится большинство инструкций:
Для этой задачи вы создадите приложение, которое играет в бинго с 25 картами. Выигрышными образцами бинго являются четыре угла и комбинезон. Эта симуляция должна выполняться для 1000 игр и отображать количество бинго, которые выиграла каждая карта, в виде списка в конце. Например, для одной игры в бинго есть два выигрышных паттерна: четыре угла и комбинезон. Сыграйте в бинго, набрав номер и проверив, есть ли на любой из 25 карт бинго. Если у карты есть хит, проверьте, есть ли у этой карты бинго. Если так, увеличьте его количество лото. Несколько карт бинго могут выиграть бинго на одном шаре. Как только все карты были оценены для этого числа, этот образец бинго больше не может быть выигран. Игра заканчивается, когда оба образца бинго были награждены.
У меня есть класс BingoCard, и я создал статический метод с именем draw_multiple_cards()
, который должен играть в бинго со списком карт, но он не работает, и я также не былвозможность реализовать рабочий способ отображения / хранения количества побед. Любая помощь приветствуется;однако, пожалуйста, не проверяйте кодекс меня (если вам не нужно, чтобы ваш ответ работал)! Я буду публиковать свой код для проверки кода, как только он будет работать как задумано. Спасибо:)
Вот то, что у меня мало основного метода:
from BingoCard import BingoCard
import random
def main():
cards = []
for i in range(1, 26):
cards.append(BingoCard())
for i in range(1, 1001):
BingoCard.draw_multiple_cards(cards, random.sample(range(1, 76), 75))
for i in range(1, len(cards)+1):
print("Card:", i, "\tWins:", cards[i-1].get_wins())
main()
Вот мой класс BingoCard:
# Author: Helana Brock
# CPS 280: Homework 3, problem 1
import random
class BingoCard:
random_draw_list = random.sample(range(1, 76), 75)
def __init__(self, min_ = 1, max_ = 15):
"""
Generates a bingo card and stores the numbers in a dictionary.
Arguments:
min_ (int): The minimum number that can be on the card in the first row
max_ (int): The maximum number that can be on the card in the first row
"""
self.wins = 0
self.card = {}
for letter in "BINGO":
self.card[letter] = random.sample(range(min_, max_+1), 5)
min_ += 15
max_ += 15
self.card["N"][2] = "X" # free space!
def get_wins(self):
return self.wins
def __str__(self):
"""
Returns the bingo card.
"""
return '\n'.join('\t'.join((letter, *map(str, values))) for letter, values in self.card.items())
def draw(self, ball = random_draw_list.pop()):
"""
Pops a number off a list of random numbers. Using the pop method ensures no duplicate
numbers will be drawn.
"""
number_drawn = ball
for letter in self.card:
i = 0
for number in self.card[letter]:
if number == number_drawn:
self.card[letter][i] = "X"
i += 1
return number_drawn
def check_win(self):
"""
First checks for diagonal wins, then four-corner, then horizontal, and, finally, vertical.
"""
win = False
if self.card["B"][0] == "X" and self.card["I"][1] == "X" and self.card["N"][2] == "X" and self.card["G"][3] == "X" and self.card["O"][4] == "X":
win = True
self.wins += 1
elif self.card["O"][0] == "X" and self.card["G"][1] == "X" and self.card["N"][2] == "X" and self.card["I"][3] == "X" and self.card["B"][4] == "X":
win = True
self.wins += 1
elif self.card["B"][0] == "X" and self.card["O"][4] == "X" and self.card["B"][4] == "X" and self.card["O"][0] == "X":
win = True
self.wins += 1
for letter in self.card:
if(len(set(self.card[letter]))==1):
win = True
self.wins += 1
for i in range(5):
cnt = 0
for letter in self.card:
if self.card[letter][i] == "X":
cnt += 1
if cnt == 5:
win = True
self.wins += 1
break
return win
@staticmethod
def draw_multiple_cards(card_list, number_list):
number_drawn = number_list.pop()
for i in range(0, len(card_list)):
card_list[i].draw(number_drawn)
win = card_list[i].check_win()
if win == True:
return True
def main():
"""
***PLEASE READ***
Main method for the program. Generates a card, prints it, and loops through drawing
and printing until the check_win method returns True or the user enters "quit".
This is just so you can see how it works with one player. Obviously, as I just said, this method works and runs just fine.
"""
print("Let's play bingo!")
card = BingoCard()
print("\nHere is your card:\n")
print(card)
print("\nKeep pressing enter to continue or type quit to exit.\n")
user_input = input()
win = card.check_win()
balls_till_win = 0
while win == False and user_input != "quit":
number_drawn = card.draw()
balls_till_win += 1
print(f"\nNumber drawn: {number_drawn}.")
print(f"Total balls drawn: {balls_till_win}.\n")
print(card)
win = card.check_win()
user_input = input()
if win:
print(f"\nBingo! Total balls to win: {balls_till_win}.")
else:
print("Goodbye! Thanks for playing!")
if __name__ == "__main__":
main()