2015-12-17 2 views
0

Я пытаюсь написать сценарий, который будет использоваться в качестве входных лотерейных номеров, а также лотерейный билет, а затем посмотреть, сколько совпадений есть и распечатать это.Ошибочные списки сравнения циклов

У меня есть проблемы с моей петлей, которая сравнивает элементы из двух списков. Что я делаю не так?

READ: Serious новичок здесь.

#sets LOTTO ticket line 
def makeOneTicket(myNums): 
    for i in range(0,6): 
     nr = input() 
     myNums.append([nr]) 
    return myNums 

def makeTicketList(numTix, ticList): 
    ticket = [] 
    for i in range(0,numTix): 
     ticket = makeOneTicket(ticket) 
     ticList.append([ticket]) 

     if i == numTix -1:  
      print "Done." 
     else: 
      print "Next ticket." 
    return ticList 

def checkTicketMatch(list1, list2): 
    counter = 0 
    for element in list1: 
     if element in list2: 
      counter = counter + 1 
    return counter 



winNums = [] 
myNums = [] 
ticList = [] 
print "Please enter winning LOTTO numbers: " 
makeOneTicket(winNums) 

print "-----------------------------" 
print winNums 
print "-----------------------------" 

print "How many tickets do you have?: " 
numTix = input() 

print("Enter your lotto numbers one by one: ") 
ticList = makeTicketList(numTix, ticList) 

matches = 0 
matches = checkTicketMatch(winNums, ticList[0]) 
print matches 
+0

Что представляет собой заданный вход, вывод, полученный вами и ожидаемый выход – The6thSense

+0

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

ответ

0

Несколько вопросов с Python:

Когда вы сделаете эту строку:

myNums.append([nr]) 

Это означает, что ваш билет не будет выглядеть как [1, 1, 2, 3, 5], но [[1], [1], [2], [3], [5]].

Вместо этого, вы должны сделать

myNums.append(nr) 

Это напрямую не вызывает вашу ошибку, но позже, когда вы

ticList.append([ticket]) 

... ваш список билетов становится [[ билет], [билет]], поэтому, когда вы проводите сравнение, вы сравниваете список размером один (содержащий билет) с билетом.

Это источник вашей проблемы.

Еще одна проблема с кодом: есть два способа сделать функцию, которая делает список, создав его:

def make_list(): 
    result = [] 
    result.append(3) 
    return result 

my_list = make_list() 

или прохождение его рядный, как вы часто в C:

def fill_list(_list): 
    _list.append(3) 

my_list = [] 
fill_list(my_list) 

... у вас, кажется, есть функции, которые выполняют оба одновременно, что работает, но является излишним.

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