我有一个如何避免在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')
虽然它可能会找你这么利弊基本的,但我很困惑,以避免裁员。
保持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')
在这种方法中,你需要一个额外的变量来跟踪是否有除数与否。此外,从您的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')
我建议保存布尔标志,告诉你,你是否已经找到了循环与否时的约数。就像是:
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')
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/
为什么不只是做除数的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.