【问题标题】:Updating the value of an attribute on an instance of a class更新类实例的属性值
【发布时间】:2018-04-17 08:38:40
【问题描述】:

我不知道如何表达我遇到的这个问题,经过 4 小时的搜索,我只能在这里提问。所以我会列出我的问题并希望最好!

我已经完成了这个程序的每一步并让它运行起来,但是我的大脑无法思考如何解决这个问题。

这里是说明:

Match Coins:创建一个有两名玩家的抛硬币游戏。

每个玩家一开始有 20 个硬币。规则:

每个玩家扔自己的硬币

如果硬币匹配,

玩家 1 得到玩家 2 的硬币。

如果没有,Player2 从 Player1 获得硬币。

拥有最多硬币的人获胜。

在 main() 中,创建一个要求用户继续播放的 while 循环。

在每个循环中,报告结果……硬币匹配?

每位玩家的总硬币数?

循环应该至少掷硬币一次。

需要一个“硬币”类。该课程要求:

方法__init__()toss()get_sideup()get_amount()set_amount()

该类需要属性'__amount',初始化为20,和'__sideup' 初始化为两个值之一,“Heads”或“Tails”。

‘toss()’方法:生成随机值‘0’或‘1’,相应地分配‘头’或‘尾’。

‘get_sideup()’方法:返回__sideup的当前值。

‘set_amount()’方法:传递+1或-1来改变__amount,取决于折腾的结果。

‘get_amount()’方法:返回__amount的当前值。

我已经完成了大部分工作,但我不知道如何将硬币添加到一个实例并从下一个实例中减去。 (我把 self.get_amount 作为我遇到问题的函数的填充符)

这是我的代码:

import random


class Coin (object):
    def __init__ (self, __amount = 20, __sideup = "Heads"):

        self.__amount = __amount
        self.__sideup = __sideup

    def toss (self):
        val = random.randint(0,1)
        if val == 0:
            self.__sideup = "Heads"
        else:
            self.__sideup = "Tails"

    def get_sideup (self):
        return self.__sideup

    def get_amount(self,):
        return self.__amount

    def set_amount (self, __amount):
        self.get_amount





c1 = Coin()
c2 = Coin()
play = input ("Do you want to play? (Y/N): ")
while play == "Y" or "y":
    c1.toss()
    c2.toss()
    if c1.get_sideup() == c2.get_sideup():
        c1.set_amount(+1)
        c2.set_amount(-1)
        print("player 1 wins")
    else:
        c1.set_amount(-1)
        c2.set_amount(+1)
        print("player 2 wins")

    print(" player1: " + str(c1.get_amount()) + " and player2: " + str(c2.get_amount()))
    play = input("Do you want to play? (y/n): ")

感谢任何伸出援手的人。如果我的问题的答案在这里,请链接它。我是初学者,不知道如何很好地表达我的问题。

【问题讨论】:

  • 你认为set_amount 的实现有什么作用?

标签: python class


【解决方案1】:

您只需更新硬币对象的 self.__amount 属性,方法是将其重新绑定到硬币的 set_amount 方法中的 __amount 和 self.__amount 之和。

def set_amount (self, __amount):
    self.__amount = self.__amount + __amount

或者更简洁一点,

def set_amount (self, __amount):
    self.__amount += __amount

【讨论】:

  • @AndJustice4All x 顺便说一句,你的程序在这一行也有一个错误:while play == "Y" or "y":
  • 是的,我正在处理这个问题。目前是一个 python 程序的学生,教授不知道 python..
  • 任何提示都会很棒!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
相关资源
最近更新 更多