首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python:访问类中的过去值

python:访问类中的过去值
EN

Stack Overflow用户
提问于 2018-07-12 06:54:20
回答 1查看 42关注 0票数 -1

我正在尝试创建一个简单的游戏,五局四胜,B队每轮有60%的机会获胜。此外,我想模拟每个游戏玩了X次。

理想情况下,在运行完所有模拟之后,我能够访问每个模拟中发生的情况。例如,谁赢了第一轮,谁赢了第二轮,等等,以最有效的方式。

我的想法是,我可以将来自类的所有数据附加到一个列表中,然后访问每个类。但是,除非您附加一个实际的值,否则它不会工作。

下面是代码的一个稍微简化的示例:

代码语言:javascript
复制
class Game(object):

    def add_values(self):
        if random.random() > 0.6:
            Team.scoreA+=1
        else:
            Team.scoreB+=1

    def check_if_end(self):
        end = 0
        if max(Team.scoreA,Team.scoreB) == 3: end = 1
        return end

import random

class Team(object):

    def oriscore(self):
        Team.scoreA = 0
        Team.scoreB = 0

objdata = []
antsim = 200
for a in range(antsim):
    Team.oriscore(1)

    for i in range(5):
        Game.add_values(1)
        end = Game.check_if_end(1)
        if end == 1:
            objdata.append(Team)
            break

for i in objdata:
    print(i.scoreA,i.scoreB)

打印出下面的值只会显示上一次模拟的结果。而我想要每个模拟的结果。

在这个特定的游戏中,我可以只更改它,这样我就可以同时添加scoreA和scoreB,但是这看起来不是那么可伸缩。所以我想知道是否有更有效的方法。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 07:22:09

这里的根本问题是您没有创建任何实例。程序中唯一的对象(除了几个数字之外)是类本身。因此,您没有任何东西可以存储在列表中,只有Test类对象,您可以反复追加它,因此您最终得到了一个相同类对象的列表(您不断地改变它) 200次。

您要做的是创建200个实例Team实例,并将属性存储在这些实例上,然后您就可以在列表中拥有200个单独的对象。

首先,您必须使Team成为一个在其实例上存储值的类:

代码语言:javascript
复制
class Team(object):
    def __init__(self):
        self.scoreA = 0
        self.scoreB = 0

现在,您必须对Game执行相同的操作。而且,因为每个Game都必须使用一个Team,所以您需要给它一个:

代码语言:javascript
复制
class Game(object):
    def __init__(self, team):
        self.team = team

    def add_values(self):
        if random.random() > 0.6:
            self.team.scoreA += 1
        else:
            self.team.scoreB += 1

    def check_if_end(self):
        end = 0
        if max(self.team.scoreA, self.team.scoreB) == 3: end = 1
        return end

现在,您的循环可以创建单独的实例。然后,您可以在这些实例上调用方法,而不是在类上调用它们并将1作为假self传递

代码语言:javascript
复制
objdata = []
antsim = 200
for a in range(antsim):
    team = Team()   

    for i in range(5):
        game = Game(team)
        game.add_values()
        end = game.check_if_end()
        if end == 1:
            objdata.append(team)
            break

现在,您有了200个不同的team实例的列表,而不是对Team类对象的200个引用的列表:

代码语言:javascript
复制
for team in objdata:
    print(team.scoreA, team.scoreB)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51295220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档