Часть школьного монопольного задания ничего не выводит (Beginner, Python) - PullRequest
1 голос
/ 16 мая 2019

Мне нужно запрограммировать игру «Монополия» для моего школьного урока программирования. Это часть кода, над которым я работаю, и я собираюсь внедрить его в остальную часть моего кода. Я ожидаю, что он спросит ввод (brownhouse1), но когда я запускаю его, я ничего не получаю для вывода. Возможно, что-то действительно не так, но я не могу понять, что заставляет его ничего не выводить.

Я пытался связываться с операторами, менять значения домов и ничего не получится, я не уверен, что мне нужно изменить. (Также извините за плохое форматирование, впервые используя stackoverflow.)

Спасибо!

class Properties:
 def __init__(self,name,qprice,qrent,owner,ownername,color,house):
  self.name = name
  self.price = int(qprice)
  self.rent = int(qrent)
  self.owner = owner
  self.ownername = ownername
  self.color = color
  self.house = int(house)

MeditaranianAve = Properties("MeditaranianAve",60,2,"Yes","Player2","Brown",0)
BalticAve = Properties("Baltic Ave",60,4,"Yes","Player2","Brown",1)
Brown = (MeditaranianAve, BalticAve)

if MeditaranianAve.ownername and BalticAve.ownername == "Player2":
  if MeditaranianAve.house and BalticAve.house <= 4:
    brownhouse1 = input("Would you like to buy a house? ")
    if brownhouse1 == "y":
      if BalticAve.house > MeditaranianAve.house:
        Med1 = input("You own more houses on Baltic Ave than Meditaranian Ave, you can only purchase a house for Meditaranian Ave, would you like to purchase? y/n?")
        if Med1 == "y":
          MeditaranianAve.house = MeditaranianAve.house+1
      if MeditaranianAve.house > BalticAve.house:
        Balt1 = input("You own more houses on Meditaranian Ave than Baltic Ave, you can only purchase a house for Baltic Ave, would you like to purchase? y/n?")
        if Balt1 == "y":
          BalticAve.house = BalticAve.house+1

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Если вы обнаружите, что меняете вещи, просто чтобы увидеть, происходит ли что-то другое, это часто указывает на то, что у вашего подхода есть какая-то проблема, и может помочь резервное копирование для более широкого обзора.

В этом случаевы отслеживаете несколько различных значений для владельца, когда вам, вероятно, будет лучше с одним объектом, который может обрабатывать свое собственное имя и т. д., если вам понадобятся эти вещи.

Я думаю, что вы 'Я немного запутался в том, как работают операторы сравнения.Ваш первый оператор if проверяет существование из MeditaranianAve.ownername и затем равен ли 1009 * "Player2".Если вы хотите проверить, равны ли они оба этому значению:

if MeditaranianAve.ownername == BalticAve.ownername == "Player2":
    # ...

Тем не менее, вы можете многое исправить, отслеживая большую часть своего состояния с помощью объектов, которые могут иметь свои собственные методы.Таким образом, вы можете поместить логику, относящуюся к определенному типу, на свое место.

Это может быть место для начала.Он добавляет некоторую реляционную логику, которая может быть незнакомой, но, пройдя по ней, вы увидите общий подход к связанным моделям данных и разделение проблем для типов данных в Python.

class PropertyGroup(object):
    def __init__(self, name):
        self.name = name
        self.properties = []

    def fully_owned_by(self, player):
        for property in self.properties:
            if property.owner != player:
                return False
        return True


class Property(object):
    def __init__(self, name, group):
        self.name = name
        # This assumes all properties are part of a group; otherwise,
        # default to None and check whether this exists before trying
        # to access it.
        self.group = group
        group.properties.append(self)
        self.owner = None
        self.house_count = 0

    def houses_available(self):
        return self.house_count < 5

    def purchase_house(self):
        # This is where you'd check to make sure the owner exists and
        # can purchase a house, then implement that logic.
        pass


class Player(object):
    def __init__(self, name):
        self.name = name


player = Player('Maddie')

group = PropertyGroup('B&M')
baltic = Property('Baltic Avenue', group)
mediterranean = Property('Mediterranean Avenue', group)

baltic.owner = player

# Since Baltic but not Mediterranean is owned by the player, this
# check will be False.
if baltic.group.fully_owned_by(player) and baltic.houses_available():
    print('Prompt for house purchase')
else:
    print('No dice.')

mediterranean.owner = player

# Now that both are player-owned, this is True. Note that baltic.group,
# mediterranean.group, and our local variable group all reference the
# same group object, so you could call that method on any of them here.
if mediterranean.group.fully_owned_by(player) and mediterranean.houses_available():
    print('Prompt for house purchase')
else:
    print('No dice.')
0 голосов
/ 16 мая 2019

Проблема в том, что MeditaranianAve.house and BalticAve.house <= 4 оценивается как 0

Просто сделайте MeditaranianAve.house <= 4 and BalticAve.house <= 4 вместо

...