为什么我的 break 语句在 if 语句中不起作用,即使 print 语句有效?
Why is my break statement not working in the if statement even though the print statement works?
我正在编写一个代码来计算前 n 个质数的乘积。
def num_primorial(n):
print(str(n) + "---\n2")
prime_count = 1
product = 2
i = 3
while prime_count < n:
is_prime = True
for j in range(3, i, 2):
if i % j == 0:
print(str(i) + "****" + str(j))
is_prime = False
break
if is_prime:
print(i)
product *= i
prime_count += 1
i+=2
return product
print(num_primorial(5))
但是,在 if 语句中:
if i % j == 0:
print(str(i) + "****" + str(j))
is_prime = False
break
即使 print 语句正在运行并且正在循环,它也不会跳出 for 循环。
Click to see the output
有人能告诉我这是什么问题吗?
它正在正确退出,
由于while循环,for循环再次运行
你应该在 if 条件之后添加另一个 break 来打破 else 无限运行的条件
在for循环中使用break时,只会从for循环中退出。你有一个永远不会退出的无限 while 循环,所以你一次又一次地进入 for 循环
在您的示例中,is_prime 始终为假,因此计数永远不会改变
我解决了。问题 'i' 从未改变。所以它只是一遍又一遍地循环,因为如果 is_prime 为假,'i' 的值保持不变。我只需要将“i += 2”放在 while 循环内的最后一个 if 语句之外。
def num_primorial(n):
prime_count = 1
product = 2
i = 3
while prime_count < n:
is_prime = True
for j in range(3, i, 2):
if i % j == 0:
is_prime = False
break
if is_prime:
product *= i
prime_count += 1
i+=2
return product
现在它适用于每个数字。
我正在编写一个代码来计算前 n 个质数的乘积。
def num_primorial(n):
print(str(n) + "---\n2")
prime_count = 1
product = 2
i = 3
while prime_count < n:
is_prime = True
for j in range(3, i, 2):
if i % j == 0:
print(str(i) + "****" + str(j))
is_prime = False
break
if is_prime:
print(i)
product *= i
prime_count += 1
i+=2
return product
print(num_primorial(5))
但是,在 if 语句中:
if i % j == 0:
print(str(i) + "****" + str(j))
is_prime = False
break
即使 print 语句正在运行并且正在循环,它也不会跳出 for 循环。
Click to see the output
有人能告诉我这是什么问题吗?
它正在正确退出,
由于while循环,for循环再次运行
你应该在 if 条件之后添加另一个 break 来打破 else 无限运行的条件
在for循环中使用break时,只会从for循环中退出。你有一个永远不会退出的无限 while 循环,所以你一次又一次地进入 for 循环
在您的示例中,is_prime 始终为假,因此计数永远不会改变
我解决了。问题 'i' 从未改变。所以它只是一遍又一遍地循环,因为如果 is_prime 为假,'i' 的值保持不变。我只需要将“i += 2”放在 while 循环内的最后一个 if 语句之外。
def num_primorial(n):
prime_count = 1
product = 2
i = 3
while prime_count < n:
is_prime = True
for j in range(3, i, 2):
if i % j == 0:
is_prime = False
break
if is_prime:
product *= i
prime_count += 1
i+=2
return product
现在它适用于每个数字。