3

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

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

我已经多次提示用户输入可用数字的选择。输入该数字后,它会连同可能存在的任何因素一起从列表中删除。

我已经阻止用户选择素数。但是,在某个时间点,那里可能有非质数,它们没有剩余的因子。

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

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

  • 检查是否只剩下素数或没有因数的数字。

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

4

3 回答 3

5

要检查是否有guess剩余数量的任何因素,您可以使用any()

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

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

onlyprimes = all(isprime(n) for n in numbers)
于 2010-03-14T17:37:37.207 回答
3

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

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

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

于 2010-03-14T17:18:03.900 回答
1

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

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

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

我不确定你所说的“没有因子的数字”是什么意思,除非你的意思是“素数”(?)——在 Python 中检查素数有几个 SO 问题和答案,我会使用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

一些优化是可能的,但是这个真的很简单,我不愿意添加复杂的优化而不了解你所追求的是什么!-)

于 2010-03-14T17:31:15.487 回答