我甚至不确定我是用正确的名字来称呼那些人,但这就是我正在使用的东西。我正在研究一个简单的曲棍球模拟器,它只使用数学来模拟游戏的结果。目前没有名字或类似的东西,我刚刚选择了得分手时为“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中编写了原始引擎,这就是为什么它只是数字而不是物理或戏剧。
如果这不能很好地解释,请告诉我,我会进一步解释我想要做的事情。
答案 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]
现在,您可以访问该列表中的每个元素,并根据需要获取name
和overall
属性。
如果您想将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是一种非常灵活的语言。疯狂吧!