如何解决为什么我不应该在Python中将“ else”和“ if”置于同一级别
当我将其他级别与if放在同一级别时,当我调用函数时该程序无法正常工作。 (jupyter笔记本中的小星星)。但是当我将“ else”拉低一个级别时,一切都还好。该函数旨在返回存在并包含给定数字的质数的数量。这是我的代码:
def count_primes(num):
primes = list(range (3,num,2))
digit = 3
if num < 2:
return 0
while digit <= num:
for x in range (3,digit,2):
if digit % x == 0:
primes.remove(digit)
digit += 2
break
else:
digit += 2
primes.insert(0,2)
print (primes)
return len(primes)
解决方法
这是因为您不想在for循环中获取else。您只需要返回一次质数。
例如,如果我编写程序只是为了检查数字是否为质数-
if num > 1:
# check for factors
for i in range(2,num):
if (num % i) == 0:
print(num,"is not a prime number")
print(i,"times",num//i,"is",num)
break
else:
print(num,"is a prime number")if num > 1:
# check for factors
for i in range(2,"is a prime number")
PS:如果人数不超过一个,我将不包括在内。
我不想打印数字不是素数。因为如果将else放入循环中,它将在每次失败时运行。
,首先考虑if和else符合的情况。当您的数字为3时,永远不会输入for循环。回想一下,对于范围(起点,终点,步长),起点是包含在内的,终点不是包含在内的。您要告诉您的程序从3开始并且不包括3结束。您的初始程序将检查3
另一方面,如果将else与for放在一行,然后跳过for循环的内部,对于digit = 3,它将执行。似乎似乎并没有玩弄它,您可以完全跳过else子句,而只将其作为数字+ = 2。
总而言之,如果您的初始代码从3或更大的质数开始(如果语句将始终失败,则将导致相同的问题),则您的初始代码将永远不会迭代“数字”。而将其拉回一个级别将确保始终对数字进行迭代,而不管它是3还是更大的素数。
def count_primes(num):
# Changed it to num + 1 so that it includes num value in output if it is prime.
primes = list(range (3,num + 1,2))
digit = 3
if num < 2:
return 0
while digit <= num:
for x in range (3,digit,2):
if digit % x == 0:
primes.remove(digit)
digit += 2
break
digit += 2
primes.insert(0,2)
print (primes)
return len(primes)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。