2015-08-27 3 views
0

Это вопрос по вопросу, который я опубликовал ранее сегодня, и, я думаю, я очистил свой код и сузил мою проблему.Итерация над двумя аргументами Функция python

Я пытаюсь создать простую программу, которая поможет мне с фэнтезийным проектом.

Проблема заключается в том, что она хранит выбор для каждой команды, а не только для одного. Это должно быть сделано с помощью функции 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

"список" является атрибутом класса. Инициализируйте его в своем методе __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} 
+0

Должен ли я затем добавить словарь в реестр для каждого экземпляра команды? – Ethan

+0

Если у каждого экземпляра класса команд должен быть другой список ... –

+0

Отлично, спасибо! Итак, что мне следует вводить для каждой команды? 'Self.roster'? (т. Е. Когда я создаю экземпляры) – Ethan

Смежные вопросы