我有一个 list 的数字(integers)(例如,从 1 到 10)。

它们不一定是连续的,但按升序排列。

我已多次提示用户输入可用号码的选择。输入该号码后,该号码及其任何内容都会从列表中删除 因素 那可能就在那里。

我已经阻止用户选择素数。然而,在某个时间点,那里可能存在没有剩余因子的非素数。

我对 Python 比较陌生,所以我在实现时遇到了困难:

  • 检查所选数字是否没有剩余因子(即使它不是质数)。

  • 检查仅保留质数还是没有因素的数字。

我正在考虑使用 for 声明,但我不确定具体如何实现它们。任何人都可以提供建议或代码吗?提前致谢...

有帮助吗?

解决方案

检查数字是否有任何因素 guess 剩余的你可以使用 any():

hasfactors = any(guess % n == 0 for n in numbers)

要检查剩余的所有数字是否都是素数, all() 可以使用。(既然你说你已经阻止用户输入素数,我假设你有某种 isprime() 功能):

onlyprimes = all(isprime(n) for n in numbers)

其他提示

对于第一个问题,您可以使用列表推导式构建一个新列表,其中每个元素不是所选数字,也不是所选数字的因子(请参阅代码)。将其与您的原始列表进行比较。

$ python
>>> selected_number = 6
>>> [x for x in range(1,11) if selected_number % x]
[4, 5, 7, 8, 9, 10]

对于第二个问题,检查每个元素是否是素数。如果不是,检查没有因数的数字;对于每个元素,您可能 mod 覆盖原始列表并检查它是否是零列表。不过,我确信有更快的方法。

如果 L 是非零数字的列表,则作为数字 N 的因数的列表为:

factors = [x for x in L if N % x == 0]

当然,如果 N 在 L 中没有因数,则列表将是空的。

我不确定你所说的“没有因数的数字”是什么意思,除非你的意思是“素数”(?)——有几个关于检查Python素数的问题和答案,我会使用 gmpy.is_prime (来自我的扩展 gmpy)但是我当然有偏见;-)。

如果你的意思是“所有在 L 中没有因数的数字”,那么,它们的数量是无限多的,所以很难将它们全部列出来。他们的无限生成器:

import itertools

def nofactorsinlist(L):
  for i in itertools.count():
    if any(x for x in L if i % x == 0):
      continue
    yield i

一些优化是可能的,但这个真的很简单,我不愿意在不准确理解你想要什么的情况下添加复杂的优化!-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top