Python. Как посчитать количество делителей во вложенных для l oop? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть код, который генерирует числа tri angular, вычисляет делители для каждого числа tri angular и распечатывает 3 столбца, где первый столбец - это входные числа, второй столбец - это номера tri angular и третий столбец - делители каждого числа tri angular. Как подсчитать количество делителей каждого числа tri angular (подсчитать числа в третьем столбце)?

for num in range(10):
    triangle_number = num*(num+1)//2
    print(num, end = '   ')
    print(triangle_number, end = '     ')
    for divisor in range(1, triangle_number+1):
        if triangle_number%divisor == 0:
            print(divisor,  end = ',')
    print()

Вывод выглядит так:

0   0     
1   1     1,
2   3     1,3,
3   6     1,2,3,6,
4   10     1,2,5,10,
5   15     1,3,5,15,
6   21     1,3,7,21,
7   28     1,2,4,7,14,28,
8   36     1,2,3,4,6,9,12,18,36,
9   45     1,3,5,9,15,45,

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Вы можете заменить свой внутренний для l oop, используя понимание списка, а затем просто получить длину этого списка, используя функцию len, то есть заменить:

for divisor in range(1, triangle_number+1):
    if triangle_number%divisor == 0:
        print(divisor,  end = ',')

на:

divisors = [divisor for divisor in range(1, triangle_number+1) if triangle_number%divisor == 0]
print(*divisors, sep=',', end='   ')
print(len(divisors), end='')

Понимание списка - это краткий способ создания списка, который может быть создан с помощью append внутри for loop, * (оператор звезды) распаковывает, если у вас есть список x = [1, 2, 3], тогда print(*x) эквивалентен print(1, 2, 3) и т. д.

0 голосов
/ 20 апреля 2020

Вы можете добавить переменную внутри for l oop и увеличить ее, когда получите делитель и напечатать конец.

for num in range(10):
    count = 0
    triangle_number = num*(num+1)//2
    print(num, end = '\t')
    print(triangle_number, end = '\t')
    for divisor in range(1, triangle_number+1):
        if triangle_number%divisor == 0:
            print(divisor,  end = ',')
            count += 1

    print("\t", count)
##Output:
##0   0          0
##1   1     1,   1
##2   3     1,3,     2
##3   6     1,2,3,6,     4
##4   10     1,2,5,10,   4
##5   15     1,3,5,15,   4
##6   21     1,3,7,21,   4
##7   28     1,2,4,7,14,28,  6
##8   36     1,2,3,4,6,9,12,18,36,   9
##9   45     1,3,5,9,15,45,  6
##Output order : input number, count of divisors divisors, triangular number

или вы можете создать список делителей и измерить длину перед печатью.

for num in range(10):
    divisors = []
    triangle_number = num*(num+1)//2
    print(num, end = '\t')
    print(triangle_number, end = '\t')
    for divisor in range(1, triangle_number+1):
        if triangle_number%divisor == 0:
            divisors.append(divisor)

    print(len(divisors), "\t", ",".join(str(div )for div in divisors))
##Output:
##0 0   0    
##1 1   1    1
##2 3   2    1,3
##3 6   4    1,2,3,6
##4 10  4    1,2,5,10
##5 15  4    1,3,5,15
##6 21  4    1,3,7,21
##7 28  6    1,2,4,7,14,28
##8 36  9    1,2,3,4,6,9,12,18,36
##9 45  6    1,3,5,9,15,45
##Output order : input number, triangular number, count of divisors divisors
...