蟒 - 避免在for循环不必要的重复

问题描述 投票:0回答:5

我有一个如何避免在for循环#redundant重复的理解有问题。该程序所要打印的数量的约数取值范围为2和number

number = int(input('Enter an integer: '))
for divisor in range (2, number):
    if number % divisor == 0:
        print (divisor)
    else:
        print (number, 'has no divisors in the range')

虽然它可能会找你这么利弊基本的,但我很困惑,以避免裁员。

python for-loop if-statement
5个回答
0
投票

保持count的除数,并在年底检查其等于零。

number = int(input('Enter an integer: '))
count = 0
for divisor in range (2, number):
    if number % divisor == 0:
        print (divisor)
        count += 1
if count == 0:
    print (number, 'has no divisors in the range')

0
投票

在这种方法中,你需要一个额外的变量来跟踪是否有除数与否。此外,从您的else块缩进应该被删除。看看下面的代码:

number = int(input('Enter an integer: '))
is_divisor_found = False
for divisor in range(2, number):
    if number % divisor == 0:
        is_divisor_found = True
        print(divisor)
if not is_divisor_found:
    print(number, 'has no divisors in the range')

0
投票

我建议保存布尔标志,告诉你,你是否已经找到了循环与否时的约数。就像是:

number = int(input('Enter an integer: '))
has_divisors = False
for divisor in range (2, number):
    if number % divisor == 0:
        print (divisor)
        has_divisors = True
if not has_divisors:
    print (number, 'has no divisors in the range')

0
投票

range(2, number)的复杂性是O(number)

虽然我们可以优化同样以O(sqrt(number))如下:

import math

number = int(input('Enter an integer: '))
divisor = 2
have_divisor = False

while divisor <= math.sqrt(number):
    if number % divisor == 0:
        print (divisor)
        print (number/divisor)
        have_divisor = True
    divisor += 1

if not have_divisor:
    print (number, 'has no divisors')

参考:https://www.geeksforgeeks.org/find-divisors-natural-number-set-1/


0
投票

为什么不只是做除数的list并追加仅当它是。

number = int(input('Enter an integer: '))
divislbes = []

for divisor in range (2,number):
    if number % divisor == 0:
        divislbes.append(divisor)

print((number, "has no divisors in range.") if not divislbes else "The divisbles of ", number, " are: ", divislbes)

OUTPUT:

Enter an integer: 5
5 has no divisors in  range.
© www.soinside.com 2019 - 2024. All rights reserved.