#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 покажет мне, что у меня синтаксическая ошибка. Еще раз спасибо.