2016-05-18 20 views
2

Я очень новичок в Python и программировании. Я пытался создать небольшую программу, которая расскажет вам защитника для команд НФЛ. Я получил его на работу, но ищет, чтобы увидеть, если есть меньше повторяющийся способ сделать это по двум причинам:вызывающий класс с пользовательским вводом

  • Так что я не должен набрать столько, сколько и
  • Потому что он будет держать мой код короче.

Я пытался иметь пользователей входной разъем в классе вызывающего, так что я не должен был бы ввести так много и использовать много elif команд, например:

x= input("")` 
print (x.qb,x.num) 

Вот что Я до сих пор. Он работает сейчас, но я хотел бы более простой способ, чтобы закончить его:

class football: 
    def __init__(self,qb,num):                       
     self.qb = qb 
     self.num = num 

Niners = football("Gabbert", "02") 
Bears = football("CUTLER, JAY","06") 
Bengals = football ("Dalton, Andy","14") 
Bills =football (" Taylor, Tyrod", "05") 
Broncos =football ("Sanchez, Mark", "06") 
Browns =football ("MCCOWN, JOSH", "13") 
Bucaneers =football ("Winston, Jameis", "03") 
Cardinals =football ("PALMER, CARSON", "03") 
Chargers =football ("RIVERS, PHILIP", "17") 
Cheifs =football ("SMITH, ALEX", '11') 
Colts =football ("Luck, Andrew",' 12') 
Cowboys =football ("Romo,Tony","09") 
Dolphins =football ("Tannehill, Ryan", '17') 
Eagles =football ("Bradford, Sam", '07') 
Falcons =football ("RYAN, MATT",' 02') 
Giants =football ("MANNING, ELI", '10') 
Jaguars =football ("Bortles, Blake", '05') 
Jets =football ("Smith, Geno",' 07') 
Lions =football ("Stafford, Matthew", '09') 
Packers =football ("RODGERS, AARON", '12') 
Panthers =football ("Newton, Cam",' 01') 
Patriots =football ("BRADY, TOM", '12') 
Raiders =football ("Carr, Derek",' 04') 
Rams =football ("Foles, Nick", '05') 
Ravens =football ("FLACCO, JOE",' 05') 
Redskins =football ("Cousins, Kirk", '08') 
Saints =football ("BREES, DREW",' 09') 
Seahawks =football ("Wilson, Russell", '03') 
Steelers =football ("ROETHLISBERGER, BEN",' 07') 
Texans =football ("Osweiler, Brock", '17') 
Titans =football ("Mariota, Marcus",' 08') 
Vikings=football ("Bridgewater, Teddy", '05') 

def decor(func): 
    def wrap(): 
     print("===============================") 
     func() 
     print("===============================") 
    return wrap 

def print_text(): 
    print("Who\s your NFL Quarterback? ") 

decorated = decor(print_text) 
decorated() 

team= input(" Enter your teams name here:").lower() 

if team == "cowboys": 
    print (Cowboys.qb,Cowboys.num) 
elif team == "niners": 
    print (Niners.qb,Niners.num) 
+1

Я думаю, что словарь будет более подходящей структурой данных здесь. – nekomatic

+0

OK Я буду читать те, которые, как я сказал, очень новы ко всему этому. на самом деле это моя первая небольшая программа, которую я сделал. –

+0

Я думаю, что этот вопрос будет более подходящим на [codereview.se] – zondo

ответ

0

Один хороший вариант будет использовать словарь для ссылки на каждый экземпляр football, который позволил бы избежать массивной if, elif структуру в конце :

class football: 
    def __init__(self,qb,num): 
     self.qb = qb 
     self.num = num 

    def __str__(self): 
     return self.qb + ", " + self.num 
teams = { 
"Niners" : football("Gabbert", "02"), 
"Bears" : football("CUTLER, JAY","06"), 
"Bengals" : football ("Dalton, Andy","14"), 
"Bills" : football (" Taylor, Tyrod", "05")} #etc 
#I didn't include the whole dictionary for brevity's sake 

def decor(func): 
    def wrap(): 
     print("===============================") 
     func() 
     print("===============================") 
    return wrap 

def print_text(): 
    print("Who\s your NFL Quarterback? ") 

decorated = decor(print_text) 
decorated() 

team = input("Enter your teams name here:").capitalize() 
print(teams[team]) 

Вы заметите, что команды сейчас находятся в словаре, так что football экземпляр для каждой команды может быть легко доступны индексации словаря, используя имя команды. Это то, что было сделано на последней строке с заявлением print(teams[team]).

teams[team] возвращает значение, связанное с ключом, который хранится внутри team. Например, если пользователь вводит Chiefs, строка 'Chiefs' будет храниться в team. Затем, когда вы пытаетесь индексировать словарь с помощью teams[team], он будет обращаться к словарной записи для 'Chiefs'.

Но обратите внимание, что то, что требуется от teams[team], является объектом football. Обычно, когда вы просто печатаете объект, он печатает что-то похожее на то, что происходит here, потому что он просто печатает некоторую необработанную информацию об объекте. Способ вернуть его, что вы хотите, это определить метод __repr__ или __str__ в классе (подробнее об этом here). Это именно то, что я сделал в классе football, так что, когда экземпляр класса напечатан, он распечатает нужную информацию в нужном формате.


Другой подход заключается покончить с классом в целом, и просто есть словарь, значения которого являются кортежи, содержащие имя защитника и их число в качестве элементов. Код будет выглядеть немного как это:

teams = { 
"Niners" : ("Gabbert", "02"), 
"Bears" : ("CUTLER, JAY","06"), 
"Bengals" : ("Dalton, Andy","14"), 
"Bills" : (" Taylor, Tyrod", "05")} #etc 
# Again, not including the whole dictionary for brevity's sake 

def decor(func): 
    def wrap(): 
     print("===============================") 
     func() 
     print("===============================") 
    return wrap 

def print_text(): 
    print("Who\s your NFL Quarterback? ") 

decorated = decor(print_text) 
decorated() 

team = input("Enter your teams name here:").capitalize() 
print(teams[team][0], teams[team][1]) 

На этот раз teams[team] является кортежем. В последней строке печатается первый элемент (имя защитника), затем второй элемент (номер).


Второй - более чистый и требует меньше кода, но это действительно вопрос личных предпочтений.

Дополнительная информация о словарях в docs.

Кроме того, я сократил образец кода ради краткости, но вы можете увидеть образцы полного кода на pastebin.

+0

О, вау, большое спасибо Xamuel Schulman. Я очень ценю это и очень информативный, я начинал делать второй, прежде чем читать это не понял, что я могу оставить их in(), хотя они должны были быть добавлены в [], еще раз, безусловно, то, что я искал. –

+0

да Я новичок в этом сайте/приложении, я делаю это с чеком слева –

+0

@JesseHinojosa Да. Огромное спасибо. –

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