2017-08-15 97 views
3

我甚至不确定我是通过他们的正确名称来呼叫这些人,但这是我正在处理的事情。我正在研究一个简单的曲棍球模拟器,目前只使用数学来模拟游戏的结果。目前没有任何名字或类似的东西,我刚刚为选中的记分员生成了“team1”名称的“列表”。这就是这个问题的原因。我想为每个团队创建一个球员列表,并认为功能是最好的...如果它不是,请让我知道一个更简单的方法。因此,这里的功能现在:从Python中的函数调用“变量”?

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体育是如何处理这个问题的,因为我对编码非常陌生(刚入学),我在excel中编写了原始引擎,这就是为什么它只是数字而不是物理或游戏。

如果这不能很好地解释它,请让我知道,我会进一步解释我正在尝试做什么。

+2

这听起来像你想[对象](https://learnpythonthehardway.org/book/ex40.html)。 – hnefatl

+0

另外,修复你的缩进。空格在Python中很重要。 –

+3

你应该使用'class'而不是函数。然后制作该类的特定玩家实例。 –

回答

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] 
+0

但是,我会如何为玩家2设定一个不同的整体?在这种情况下,玩家2是否从班级玩家那里获得不同的奖励? –

+0

它会为'player2'随机选择'overall'。如果你想在创建播放器的时候添加它,你可以将它添加到__init __()中,否则现在编辑答案 –

+0

因此,对于tm1players,有一种方法可以获取所有player.name的名称,而不必将该列表输入充分? –

0

虽然手动创建类是这一问题的最佳解决方案,我相信通过collections.namedtuple生成一个也可以在此senario中工作。

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 
+0

'collections.namedtuple'为您生成一个类。 –

+0

@MadPhysicist我改变了我的答案的措辞。 – Ajax1234

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“杰森Delhome杰斐逊”,你可以把这个例子各种操作在你的类方法之间。

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是一个非常灵活的语言GE。用它疯狂吧!