我希望使用以下语句为玩家的对象添加点数。
players[players.index(active_player)].points += moves[active_move]
设置对象的整体代码非常简单但是我得到一个值错误,表示我输入的玩家不在列表中。补充代码如下:
class Player(object):
def __init__(self, name):
self.name = name
self.points = 0
def setup(players):
numplayers = int(raw_input("Enter number of players: "))
for i in range(numplayers):
name = raw_input("Enter player name: ")
player = Player(name)
players.append(player)
def display_moves(moves):
for item in moves:
print item, moves[item]
def main():
players = []
moves = {'Ronaldo Chop': 10, 'Elastico Chop': 30, 'Airborne Rainbow': 50, 'Fancy Fake Ball Roll': 50, 'Stop Ball and Turn': 20}
setup(players)
display_moves(moves)
flag = False
while not flag:
active_player = raw_input("Enter a player (0 to exit):")
if active_player == 0:
break
active_move = raw_input("Enter a move: ")
players[players.index(active_player)].points += moves[active_move]
main()
答案 0 :(得分:1)
这一行:
players[players.index(active_player)].points += moves[active_move]
比它需要的要复杂得多。 players.index
返回players
内给定对象的索引,因此您正在搜索刚刚在列表中输入的数字的位置。因此,players.index(active_player)
会搜索您刚刚在玩家中输入的数字,如果找到,则会返回它位于players
内的索引。由于players
包含Player
个对象(不是整数),因此查找将始终失败并引发异常。
我认为你要做的只是
players[active_player].points += moves[active_move]
在列表中使用active_player
作为索引。
但是请注意,由于列表索引从零开始,因此您不应将零视为“退出”值,否则您将无法访问列表中的第一个播放器。
答案 1 :(得分:0)
players.index(active_player)
尝试查找并返回active_player
中players
的第一个位置。 active_player
是一个数字,而不是一个玩家。你只想要
players[active_player].points += moves[active_move]
(其他错误:您忘记在int
的播放器输入上调用active_player
。此外,列表索引从0开始,因此您可能希望在编制索引时从active_player
中减去1进入players
。)