从Python中的函数调用“变量”?

时间:2017-08-15 19:29:53

标签: python

我甚至不确定我是用正确的名字来称呼那些人,但这就是我正在使用的东西。我正在研究一个简单的曲棍球模拟器,它只使用数学来模拟游戏的结果。目前没有名字或类似的东西,我刚刚选择了得分手时为“team1”生成了一个名单“列表”。这就是它的用武之地。我想为每个团队创建一个玩家列表,并认为功能最好......如果不是,请让我知道一个更简单的方法。所以这就是现在的功能:

def c1():
     _name = "Jason Delhomme"
     _overall = random.choice((6.00, 7.44, 8.91))

需要在某些地方调用_overall变量,而在另一个地方调用_name变量。这可能吗?

tm1center = ((c1 * .5) + (c2 * .35) + (c3 * .15)) * 3

而不是上面的“c1”我将用c1函数中的_overall替换它。我不知道该怎么做或者是否有可能......抱歉在这里重复一遍大声笑......

然后我有这个(下面)的播放器列表:

tm1players = ["player1", "player2", "player3", "player4", "player5"]

理想情况下,我会在每个函数中用_name变量替换所有这些。玩家的功能也可以通过他们的速度,手,射击等评级更深入。我不知道sim sports是如何处理的,因为我对编码很新(刚开始上学)而且我在excel中编写了原始引擎,这就是为什么它只是数字而不是物理或戏剧。

如果这不能很好地解释,请告诉我,我会进一步解释我想要做的事情。

4 个答案:

答案 0 :(得分:2)

在您的情况下,最好使用一个类并为该类分配两个变量,然后创建它的实例,例如:

class Player:
    def __init__(self, name):
        self.name = name
        self.overall = random.choice((6.00, 7.44, 8.91))

player1 = Player('Jason Delhomme')
player2 = Player('Another Player')

tm1center = (player1.overall * .5) + (player2.overall * .35)
tm1players = [player1.name, player2.name]

编辑:

在创建类时添加overall,您需要将init方法更改为:

def __init__(self, name, overall):
    self.name = name
    self.overall = overall

然后在创建类时传递它:

player1 = Player('Player Name', 6.23)

您可以在开始时创建一个玩家列表,并将每个玩家实例附加到该列表以供将来使用,例如:

player_list = []
player1 = Player('Player Name', 5)
player_list.append(player1)
player2 = Player('Player2 Name', 2.5)
player_list.append(player2)

# dynamically create tm1players and tm1center
tm1players = [x.name for x in player_list]
tm1center = [x.overall for x in player_list]

答案 1 :(得分:0)

虽然手动创建一个类是解决这个问题的一个很好的解决方案,但我相信通过from collections import namedtuple import random Player = namedtuple("Player", "name overall") player1 = Player("Jason Delhomme", random.choice((6.00, 7.44, 8.91))) player1 = Player("Other Name", random.choice((6.00, 7.44, 8.91))) final_overall = (player1.overall * .5) + (player2.overall * .35) 生成一个类也可以在这个句子中运行。

list_of_players = [Player(input("Enter player: "), random.choice((6.00, 7.44, 8.91))) for i in range(5)]

tm1center = ((list_of_players[0].overall * .5) + (list_of_players[1].overall * .35) + (list_of_players[2].overall * .15)) * 3

使用列表理解,您可以构建整个团队:

{{1}}

答案 2 :(得分:0)

您必须阅读有关面向对象编程的内容,然后开始使用类,方法和创建对象。这是在类的保护伞下使用不同功能(方法)的示例。请注意如何在不同方法之间访问变量时使用self

ClassHockey():
   def __init__(self):
       self.description = "in here you would define some 'you always use' 
                                                                variables"

   def c1(self):
       self._name = "Jason Delhome"
       self._overall = random.choice((6.00, 7.44, 8.91))

   def c2(self):
       self._new_name = self._name + "Jefferson"
       return self._new_name



hockeyName = ClassHockey()
hockeyName.c2()

如果你运行它,你将获得_new_name" Jason Delhome Jefferson",你可以将这个例子应用于你的类方法之间的各种操作。

答案 3 :(得分:0)

Python允许您使用classes将信息和数据分组在一起。在您的情况下,您大多数都有关于每个玩家的信息,如姓名和各种统计数据。你可以定义一个类:

class Player:
    def __init__(self, name):
        self.name = name
        self.overal = random.choice((6.00, 7.44, 8.91))

现在您可以从类中创建一堆对象:

c1 = Player("player1")
c2 = Player("player2")
c3 = Player("player3")

你可以计算

tm1center = ((c1.overall * .5) + (c2.overall * .35) + (c3.overall * .15)) * 3

由于您已拥有list个玩家名称,因此您可以使用list comprehension一步获取玩家列表:

tm1players = ["player1", "player2", "player3", "player4", "player5"]
tm1 = [Player(name) for name in tm1players]

现在,您可以访问该列表中的每个元素,并根据需要获取nameoverall属性。

如果您想将tm1center1计算扩展为现在包括所有五个玩家,您可以为每个玩家分配一个权重:

class Player:
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight
        self.overal = random.choice((6.00, 7.44, 8.91))

tm1center = sum([p.overall * p.weight for p in tm1]) * len(tm1)

其中tm1定义如下:

 tm1players = ["player1", "player2", "player3", "player4", "player5"]
 tm1weights = [0.5, 0.3, 0.05, 0.1, 0.05]
 tm1 = [Player(name, weight) for name, weight in zip(tm1players, tm1weights)]

Python是一种非常灵活的语言。疯狂吧!