gpt4 book ai didi

Python:while 在 else 中循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:00 25 4
gpt4 key购买 nike

def is_prime(x):     
count = 1
my_list = []
while count > 0 and count < x:
if x % count == 0:
my_list.append(x/count)
count += 1
return my_list
my_list = is_prime(18)

def prime(x):

my_list2 = []
for number in my_list:
if number <= 2:
my_list2.append(number)
else:
count = 2
while count < number:
if number % count == 0:
break
else:
my_list2.append(number)
count += 1
return my_list2
print prime(18)

刚开始使用 Python。我有一个非常简单的问题。

这会打印:[9, 3, 2]

有人能告诉我为什么 else 中的循环在 count = 2 时停止吗?换句话说,我的循环中的循环似乎没有循环。如果我可以让我的循环工作,希望这应该打印 [2, 3]。感谢任何见解!

最佳答案

假设 my_list2(对于列表来说不是一个很好的名称)应该只包含来自 my_list 的素数,您需要稍微更改一下您的逻辑。目前,9 被添加到列表中,因为 9 % 2 != 0。然后 9 % 3 被测试并且循环 breaks but 9 已经被添加到列表中。

在将其添加到列表之前,您需要确保每个数字都没有因素。

有很多更简洁的方法可以做到这一点,但如果您是 Python 新手,它们涉及的内容可能会让您感到困惑。这种方式非常接近您最初的尝试。请注意,我已经更改了您的变量名称!我还使用了您传递给 get_prime_factorsx (在您的问题中,您将其传递给函数但未使用它)。我没有使用全局 my_list,而是从 get_prime_factors 中调用函数 get_factors。或者,您可以传入一个列表 - 我已经在评论中展示了这需要的更改。

def get_factors(x):
count = 1
my_list = []
while count > 0 and count < x:
if x % count == 0:
my_list.append(x/count)
count += 1
return my_list

# Passing in the number # Passing in a list instead
def get_prime_factors(x): # get_prime_factors(factors):
prime_factors = []
for number in get_factors(x): # for number in factors:
if number <= 2:
prime_factors.append(number)
else:
count = 2
prime = True
while count < number:
if number % count == 0:
prime = False
count += 1
if prime:
prime_factors.append(number)

return prime_factors

print get_prime_factors(18)

输出:

[3, 2]

只是为了让您体验一些更高级的方法,您可以执行此操作,get_prime_factors 可以简化为如下所示:

def get_prime_factors(x):
prime_factors = []
for n in get_factors(x):
if n <= 2 or all(n % count != 0 for count in xrange(2, n)):
prime_factors.append(n)
return prime_factors

all是一个内置函数,在这里非常有用。如果它迭代的所有内容都是 true,它会返回 truexrange (range 在 python 3 上)允许您遍历值列表而无需手动指定计数器。你也可以走得更远:

def get_prime_factors(x):
return [n for n in get_factors(x) if n <= 2 or all(n % c != 0 for c in xrange(2, n))]

关于Python:while 在 else 中循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22501006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com