вызов модулей из других модулей. AttributeError: объект ‘BoxCars’ не имеет атрибута ‘dice’

#python

#python

Вопрос:

У меня есть четыре модуля, которые они называют друг другом, поэтому я могу играть в игру box cars (игра с кубиками). каждый модуль имеет один класс. модули die.py , pairOfDice.py , boxCars.py , и boxCarsStarter.py . boxCarStarter.py является клиентом, или он будет запускать саму игру. Проблема в том, что когда я пытаюсь его запустить, он выдает ошибку атрибута. Я все еще новичок в python, поэтому не знаю, как решить эту проблему, но у меня хороший опыт работы с Java. Любая помощь будет оценена. Я думаю, что способ, которым я вызываю другие модули, является реальной проблемой. Игра состоит в том, чтобы бросить пару кубиков, а затем, в зависимости от того, что вы получите, это даст вам очки, тот, кто первым наберет 150 очков, выиграет, но я не думаю, что фактические правила игры имеют значение. p.s: в фактическом исходном коде строки имеют правильный отступ.

 # this is the die.py class
from random import randint


class Die(object):
    def __init__(self):
        self.side = 6
        self.face = 0

    def roll(self):
        face = randint(1, self.side 1)
        return face

    def get_face(self):
        return self.face



# This is the pairOfDice.py class
from assingments import die


class PairOfDice(object):
def __int__(self):
    self.die1 = die.Die()
    self.die2 = die.Die()

def get_die1(self):
    return self.die1.get_face()

def get_die2(self):
    return self.die2.get_face()

def roll(self):
    self.die1.roll()
    self.die2.roll()

def is_snake_eyes(self):
    flag = False
    if (self.get_die1() and self.get_die2()) == 1:
        flag = True
    return flag

def is_boxcars(self):
    flag = False
    if (self.get_die1() and self.get_die2()) == 6:
        flag = True
    return flag

def is_doubles(self):
    flag = False
    if (self.get_die1() == self.get_die2()) and not self.is_snake_eyes():
        flag = True
    return flag

def dice_sum(self):
    total = self.get_die1()   self.get_die2()

    return total



#this is the BoxCars.py class
import math
from assingments import pairOfDice


class BoxCars(object):
def __int__(self):
    self.dice = pairOfDice.PairOfDice()
    self.computer_score = 0
    self.human_score = 0
    self.name = ""

def player(self, s):
    self.name = s

def play_game(self):
    while True:
        self.computer_turn()
        self.between_turns()
        self.human_turn()
        self.between_turns()
        if (self.total_round_score() < 150) or self.human_score == self.computer_score:
            break

    if self.human_score > self.computer_score:
        print(f"{self.name}, congratulations! you beat the computer!")
    else:
        print(f"sorry, {self.name} you got beat by the computer")

def total_round_score(self):
    if self.human_score > self.computer_score:
        max_num = self.human_score
    else:
        max_num = self.computer_score

    return max_num


def between_turns(self):
    print(f"CURRENT GAME SCORE: COMPUTER: {self.computer_score}"
          f"   {self.name}: {self.human_score}n")
    input("press ENTER to continue ...")


def snake_eyes(self, player_score):
    print('tttRolled snake eyes! All turn points will be doubled.')
    player_score  = 2

    return player_score

def box_cars(self):
    print('tttRolled box cars! All points are gone now!')
    total_score = 0

    return total_score

def doubles(self):
    print('tttRolled double. . . lose all turn points.')
    round_score = 0

    return round_score

def default_dice(self, player_score):
    player_score  = self.dice.dice_sum()

    return player_score

def computer_turn(self):
    computer = 0
    current_turn = 0
    count = 0
    stop = True

    print('Computer's turn')

    for i in range(5):
        if stop:
            self.dice.roll()
            print(f"ttRolled: {self.dice.get_die1()} and {self.dice.get_die2()}")

            if self.dice.is_snake_eyes():
                computer = self.snake_eyes(computer)
                count  = 1

            elif self.dice.is_boxcars():
                computer = self.box_cars()
                self.computer_score = 0
                stop = False

            elif self.dice.is_doubles():
                computer = self.doubles()
                stop = False

            else:
                computer = self.default_dice(computer)

            if self.dice.is_doubles() or self.dice.is_boxcars():
                current_turn = 0

            else:
                current_turn  = self.dice.dice_sum()

            print(f"ttCurrent score for this turn {current_turn}")

            if computer >= 20:
                stop = False

            computer *= math.pow(2, count)
            self.computer_score  = computer

def human_turn(self):
    human = 0
    current_turn = 0
    count = 0
    stop = True
    question = 0

    print(self.name   "'s turn:")

    for i in range(5):
        if stop:
            self.dice.roll()
            print(f"ttRolled: {self.dice.get_die1()} and {self.dice.get_die2()}")

            if self.dice.is_snake_eyes():
                human = self.snake_eyes(human)
                count  = 1

            elif self.dice.is_boxcars():
                human = self.box_cars()
                self.human_score = 0
                stop = False

            elif self.dice.is_doubles():
                human = self.doubles()
                stop = False

            else:
                human = self.default_dice(human)

            if self.dice.is_doubles() or self.dice.is_boxcars():
                current_turn = 0

            else:
                current_turn  = self.dice.dice_sum()

            print(f"ttCurrent score for this turn: {current_turn}")

            if (question < 4) and stop:
                answer = input("Roll again> (y/n)")[0]
                if answer == 'n':
                    stop = False
                question  = 1

            human  = math.pow(2, count)
            self.human_score = human


# this is the boxCarsStarter.py class
from assingments import boxCars
box = boxCars.BoxCars()
print('welcome to BoxCars - The game of dice')
n = input("who is playing the game?")

if __name__ == "__main__":
    box.player(n)
    box.play_game()




# this is the error message when I run the boxCarsStarter.py.
welcome to BoxCars - The game of dice
who is playing the game?lauth
Computer's turn
Traceback (most recent call last):
  File "C:/Users/Laith/PycharmProjects/New/assingments/boxCarsStarter.py", 
line 8, in <module>
    box.play_game()
  File "C:UsersLaithPycharmProjectsNewassingmentsboxCars.py", line 17, in play_game
self.computer_turn()
 

Файл «C:UsersLaithPycharmProjectsNewassingmentsboxCars.py «, строка 77, в computer_turn
self.dice.roll()
AttributeError: объект ‘BoxCars’ не имеет атрибута ‘dice’

Процесс завершен с кодом выхода 1

Комментарии:

1. Я голосую за то, чтобы закрыть это как опечатку.

Ответ №1:

У вас опечатка __int__ . Должно быть __init__

Комментарии:

1. Спасибо за ваш ответ. Это фактически устранило мою проблему. По какой-то причине я думал, что init — это ключевое слово, и IDE покажет мне, что у меня синтаксическая ошибка. Еще раз спасибо.