首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python,如何使用列表中输入的项,并使用它们来分配另一个值?有没有可能

Python,如何使用列表中输入的项,并使用它们来分配另一个值?有没有可能
EN

Stack Overflow用户
提问于 2018-06-15 03:48:32
回答 4查看 61关注 0票数 2

我正在编写一个程序,从用户那里获取一些玩家作为输入,并将这些名字添加到一个列表中。现在,我想将添加到列表中的名字用于player_list中每个球员的评分系统中。

我想用每个名字来说这个球员有这么多的分数。因此,我想使用列表中的名称作为每个对象,并为每个对象分配一个分数。

我的问题是,我能用列表中的项目做到这一点吗?我现在创建这个列表的代码如下所示。

代码语言:javascript
复制
# 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的变量

我认为它看起来像这样:

代码语言:javascript
复制
players_list[0](score)

但我知道,如果确实可能的话,这不是写它的方式。如果我需要澄清,请告诉我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-15 03:59:25

您正在尝试做的是一个新的Player类的完美应用程序:

代码语言:javascript
复制
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一样访问该分数。

希望这对你有所帮助,祝你学习顺利。

票数 2
EN

Stack Overflow用户

发布于 2018-06-15 04:07:17

对象确实是不错的选择,但是如果你不想做OOP,那么你可以使用字典:

代码语言:javascript
复制
players = {}

players['geddy'] ={}
players['alex'] = {}
players['neil'] = {}

players['geddy']['score']=1;
players['alex']['score']=2;
players['neil']['score']=3;


print players

输出:

代码语言:javascript
复制
{'alex': {'score': 2}, 'neil': {'score': 3}, 'geddy': {'score': 1}}

一个面向对象的解决方案示例:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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

玩得开心

票数 0
EN

Stack Overflow用户

发布于 2018-06-15 04:10:01

使用字典和F字符串以获得更整洁的外观。从技术上讲,MoxieBall的Class answer是Pythonic式的,但如果不熟悉类,可能会很棘手。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50864868

复制
相关文章

相似问题

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