【问题标题】:Python. How do i count the number of divisors in nested for loop?Python。如何计算嵌套 for 循环中的除数?
【发布时间】:2020-04-20 06:16:33
【问题描述】:

我有一个生成三角数的代码,计算每个三角数的除数并打印出 3 列,其中第一列是输入数,第二列是三角数,第三列是每个三角的除数数字。如何计算每个三角形数的除数(数第三列的数字)?

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,

【问题讨论】:

  • @Tom Karzes 已修复

标签: python python-3.x for-loop


【解决方案1】:

您可以在for 循环内添加一个变量,并在获得除数并打印结尾时递增它。

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

【讨论】:

    【解决方案2】:

    您可以使用列表理解替换您的内部 for 循环,然后使用 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='')
    

    列表理解是创建列表的简洁方法,可以通过for loop 中的appending 创建列表,*(星号运算符)进行解包,如果您有列表x = [1, 2, 3],那么print(*x) 相当于print(1, 2, 3) 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 2022-08-05
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多