Как сохранить данные, введенные с помощью Input, в объектах классов?

Как можно улучшить код для создания игры "камень, ножницы, бумага" с использованием ООП и вводом данных от пользователя таким образом, чтобы он работал корректно? В текущем коде есть класс "Player", перечисление "Variants" и несколько пропущенных строк в методе "whoWins". Как можно лучше организовать взаимодействие и обработку данных между классами и методами?
  • 22 марта 2024 г. 0:59
Ответы на вопрос 1
Для сохранения данных, введенных с помощью Input, в объектах классов, можно создать соответствующие атрибуты в этих классах и присвоить им значения, полученные от пользователя через Input. Например:

```python
class Player:
    def __init__(self):
        self.choice = None

    def make_choice(self):
        self.choice = input("Выберите камень, ножницы или бумагу: ")

player1 = Player()
player1.make_choice()
```

Для улучшения кода игры "камень, ножницы, бумага" с использованием ООП и вводом данных от пользователя, можно доработать классы и методы следующим образом:

1. Создать класс Game, в котором будут содержаться методы для проведения игры.
2. Перенести перечисление Variants внутрь класса Game.
3. Добавить методы для проверки правильности ввода от пользователя и определения победителя в класс Game.
4. В методе whoWins сравнивать выборы игроков и определять победителя.

Примерно так может выглядеть улучшенный код:

```python
class Game:
    class Variants:
        ROCK = "камень"
        SCISSORS = "ножницы"
        PAPER = "бумага"

    @staticmethod
    def whoWins(player1, player2):
        if player1.choice == player2.choice:
            return "Ничья"
        elif (player1.choice == Game.Variants.ROCK and player2.choice == Game.Variants.SCISSORS) or \
             (player1.choice == Game.Variants.SCISSORS and player2.choice == Game.Variants.PAPER) or \
             (player1.choice == Game.Variants.PAPER and player2.choice == Game.Variants.ROCK):
            return "Игрок 1 победил"
        else:
            return "Игрок 2 победил"

class Player:
    def __init__(self):
        self.choice = None

    def make_choice(self):
        while True:
            self.choice = input("Выберите камень, ножницы или бумагу: ")
            if self.choice in [Game.Variants.ROCK, Game.Variants.SCISSORS, Game.Variants.PAPER]:
                break
            else:
                print("Неверный выбор. Попробуйте снова.")

player1 = Player()
player1.make_choice()

player2 = Player()
player2.make_choice()

game = Game()
result = game.whoWins(player1, player2)
print(result)
```

Этот код позволит игрокам делать выбор из трех вариантов и определит победителя в игре "камень, ножницы, бумага". Теперь взаимодействие и обработка данных между классами и методами организованы более удобным и понятным способом.
Похожие вопросы