2014-12-27 5 views
0

У меня есть домашнее задание, где мне нужно напечатать количество результатов (диапазон (1,36), 7), где нет чисел, последовательных. Я уже написал сценарий питона для этого, но не знаю, как посчитать строки результатов, что не является чем-то вроде этого:Подсчитайте количество результатов

(1, 2, 5, 6, 8, 16, 34)

(1, 2, 5, 6, 8, 16, 35)

(1, 2, 5, 6, 8, 17, 18)

...

Что Я ожидаю, что результатом будет:

А вот мой маленький сценарий:

from itertools import combinations 

def count_consecutive(l): 
    counts = [1] 
    counts_index = 0 
    for i in range(1, len(l)): 
     if l[i] == l[i-1] + 1: 
      counts[counts_index] = counts[counts_index] + 1 
     else: 
      counts.append(1) 
      counts_index += 1 
    return max(counts)  

for comb in combinations(range(1,36), 7): 
    if count_consecutive(comb) not in [5, 6, 7]: 
     #print (comb) 
+1

Если нужно считать перестановки ', где нет номеров consecutive', что' если count_consecutive (гребень) не в [5, 6, 7] 'для? Разве это не должно быть 'if count_consecutive (comb) == 0'? –

ответ

4
counting=0 
for comb in combinations(range(1,36), 7): 
    if count_consecutive(comb) not in [5, 6, 7]: 
     print (comb) 
     counting+=1 
print (counting) 

Это даст вам номер, который вы хотите, после каждой печати добавлением 1 к подсчетом переменных. когда для loop is end, он будет печатать последнее значение , подсчитывая переменную.

Пример:

counting=0 
for comb in combinations(range(1,10),3): 
    print (comb) 
    counting+=1 
print ("The number of counts is:",counting) 

Выход:

(1, 2, 3) 
(1, 2, 4) 
(1, 2, 5) 
(1, 2, 6) 
(1, 2, 7) 
(1, 2, 8) 
(1, 2, 9) 
(1, 3, 4) 
(1, 3, 5) 
(1, 3, 6) 
.... 
.... 
.... 
(6, 8, 9) 
(7, 8, 9) 
The number of counts is: 84 

Редактировать: Вот еще вещий:

list1=[comb for comb in combinations(range(1,10),3)] 
print (len(list1)) 

Выход:

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