我正在编写一个程序,从用户那里获取一些玩家作为输入,并将这些名字添加到一个列表中。现在,我想将添加到列表中的名字用于player_list
中每个球员的评分系统中。
我想用每个名字来说这个球员有这么多的分数。因此,我想使用列表中的名称作为每个对象,并为每个对象分配一个分数。
我的问题是,我能用列表中的项目做到这一点吗?我现在创建这个列表的代码如下所示。
# total_list is to be used in the next part of my code
total_list = []
players_list = []
max_players = int(input(" how many players tonight? : "))
while len(players_list) < max_players:
players = input("First player name? : ")
players_list.append(players)
print("players so far : ")
print(players_list)
if len(players_list) == max_players:
print("players are: ")
print(players_list)
按照我现在的代码方式,我是否可以将输入到列表中的名称用作对象,并分配一个名为score
的变量
我认为它看起来像这样:
players_list[0](score)
但我知道,如果确实可能的话,这不是写它的方式。如果我需要澄清,请告诉我。
发布于 2018-06-15 03:59:25
您正在尝试做的是一个新的Player类的完美应用程序:
class Player:
def __init__(self, name):
self.name = name
self.score = 0
def __repr__(self, name):
return self.name
然后,你可以用players_list.append(Player(players))
代替players_list.append(players)
(我也觉得你应该使用像name这样的名字,而不是players,这样才能更清楚它到底是什么)。
然后,您的列表中的所有球员都将有一个关联的分数,您可以像players_list[0].score
一样访问该分数。
希望这对你有所帮助,祝你学习顺利。
发布于 2018-06-15 04:07:17
对象确实是不错的选择,但是如果你不想做OOP,那么你可以使用字典:
players = {}
players['geddy'] ={}
players['alex'] = {}
players['neil'] = {}
players['geddy']['score']=1;
players['alex']['score']=2;
players['neil']['score']=3;
print players
输出:
{'alex': {'score': 2}, 'neil': {'score': 3}, 'geddy': {'score': 1}}
一个面向对象的解决方案示例:
class Player:
def __init__(self, name="", points=0):
self.name = name
self.points = points
def identify(self):
print "my name is ", self.name, "and I have ", self.points, "points"
def scored(self):
self.points += 1;
class Players:
def __init__(self):
self.players = []
def addPlayer(self, name):
self.players.append(Player(name))
def getPlayer(self, name):
for player in self.players:
if player.name == name:
return player
def winner(self):
score, player = max([ (player.points, player) for player in self.players ])
return player
players = Players()
players.addPlayer('Geddy');
players.addPlayer('Alex');
players.addPlayer('Neil');
players.getPlayer('Geddy').scored();
players.getPlayer('Geddy').scored();
players.getPlayer('Geddy').scored();
players.getPlayer('Alex').scored();
players.getPlayer('Alex').scored();
players.getPlayer('Neil').scored();
for p in players.players:
p.identify();
print "The winner is ", players.winner().name
输出:
my name is Geddy and I have 3 points
my name is Alex and I have 2 points
my name is Neil and I have 1 points
The winner is Geddy
玩得开心
发布于 2018-06-15 04:10:01
使用字典和F字符串以获得更整洁的外观。从技术上讲,MoxieBall的Class answer是Pythonic式的,但如果不熟悉类,可能会很棘手。
players_dict = {}
max_players = int(input(" how many players tonight? : " ))
for num, x in enumerate(range(max_players)):
player = input(f"Player {num+1} name? : ")
players_dict[player] = {'score':0}
print(f"players so far : {list(players_dict)} ")
print (f"players are: {list(players_dict)}")
然后,稍后要更新分数,只需执行player_dict['name']['score'] = 3
https://stackoverflow.com/questions/50864868
复制相似问题