这是我今天早些时候发布的一个问题的后续跟进,我认为我已经清理了我的代码并缩小了我的问题。
我正在尝试建立一个简单的程序来帮助我完成幻想足球选秀。
问题似乎在于它将选秀权存储到每个团队而不仅仅是一个团队。这应该使用store_pick
函数来完成。
MCVE:
# This is designed as league set up
class Teams(object):
def __init__(self, name, draft_position, me):
self.name = name
self.draft_position = draft_position
self.me = me
roster = {"QB" : "empty", "RB1" : "empty", "RB2" : "empty", "WR1" : "empty ", "WR2" : "empty", "WR3" : "empty", "TE" : "empty", "Flex" : "empty", "K" : "empty", "DEF" : "empty"}
bench = {}
Team1 = Teams("Team1", 1, False)
Team2 = Teams("Team2", 2, False)
Team3 = Teams("Team3", 3, False)
draft_order = [Team1, Team2, Team3]
class Player(object):
def __init__(self, name, fantasypros, adp, yahoo_rank, myrank, position):
self.name = name
self.fantasypros = fantasypros
self.adp = adp
self.yahoo_rank = yahoo_rank
self.myrank = myrank
self.position = position
def mock_pick(self):
return (self.fantasypros + self.adp + self.yahoo_rank)/3.0
player_data = [("Leveon Bell", 1, 1, 5, 1, "RB"),
("Adrian Peterson", 2, 2, 1, 16, "RB"),
("Jamaal Charles", 3, 3, 3, 7, "RB")]
player_list = [Player(*player) for player in player_data]
mock_list = [Player(*player) for player in player_data]
def store_pick(z, y): #this is where Im having issues
print z in mock_list
if z.position == "RB":
if y.roster["RB1"] == "empty":
print y.name
y.roster["RB1"] = z.name
elif y.roster["RB2"] == "empty":
y.roster["RB2"] = z.name
elif z.position == "WR":
if y.roster["WR1"] == "empty":
y.roster["WR1"] = z.name
elif y.roster["WR2"] == "empty":
y.roster["WR2"] = z.name
elif y.roster["WR3"] == "empty":
y.roster["WR3"] = z.name
elif z.position == "TE":
if y.roster["TE"] == "empty":
y.roster["TE"] = z.name
def remove_pick(z):
print z in mock_list
mock_list.remove(z)
def grind(l):
mock_results = []
grind_count = 0
while grind_count < len(mock_list):
for i in l:
mock_results.append(i.mock_pick())
grind_count += 1
return mock_results
def mock_analyzer(l):
return min(l)
def pick(b): # this chooses a player
if not t.me:
for p in mock_list:
if p.mock_pick() == mock_analyzer(grind(mock_list)):
if grind(mock_list).count(p.mock_pick()) == 1: #this should figure out if there is a tie
if p.position == "RB":
if t.roster["RB1"] == "empty":
return p
elif t.roster["RB2"] == "empty":
return p
else:
return raw_input("your turn")
# initial draft round code
def mockround(a):
pick_count = 0
if a % 2 != 0:
round_order = draft_order
else:
round_order = draft_order.reversed()
for t in round_order:
print t.name,
print "are projected to select"
d = pick(t)
print d.name
remove_pick(d)
store_pick(d, t)
pick_count += 1
print t.name,
print t.roster
print Team2.name,
print Team2.roster
print Team3.name,
print Team3.roster
mockround(1)
答案 0 :(得分:0)
“名册”是一个类属性。使用__init__()
方法初始化它。
编辑:不使用所有键的“空”值对其进行初始化,而是使用defaultdict对象。或者,您可以拥有一个列出所有位置的类对象,然后使用它来从中拉出键。
import collections
class Teams(object):
def __init__(...):
# ...
self.roster = collections.defaultdict()
或
class Teams(object):
positions = ['QB', 'WR', ...]
def __init__(...):
# ...
self.roster = {pos: None for pos in Teams.positions}