Question

I ai un list de nombres (integers) (par exemple, de 1 à 10).

Ils ne sont pas nécessairement consécutifs, mais ils sont dans l'ordre croissant.

Je l'ai incité plusieurs fois à l'utilisateur de saisir un choix des numéros disponibles. Lorsque ce nombre est entré, il est retiré de la liste ainsi que l'un de ses facteurs qui peuvent être là.

Je l'ai empêché l'utilisateur de sélectionner les nombres premiers. Cependant, à un moment donné dans le temps, il peut y avoir un nombre non-prime là-bas, qui ont pas de facteurs restants.

Je suis relativement nouveau à Python, donc je vais avoir du mal à mettre en œuvre:

  • Vérifier si le numéro sélectionné n'a pas autres facteurs (même si ce n'est pas premier).

  • Vérifier si seuls nombres premiers restent, ou les numéros sans facteurs.

Je pense à l'aide d'instructions for, mais je ne sais pas exactement comment les mettre en œuvre. Quelqu'un peut-il offrir des conseils, ou un code? Merci à l'avance ...

Était-ce utile?

La solution

Pour vérifier s'il y a des facteurs du nombre guess vous pouvez utiliser restant any() :

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

Pour vérifier si tous les numéros restants sont premiers, all() peut être utilisé. (Puisque vous dites que vous avez déjà empêché l'utilisateur d'entrer des nombres premiers, je suppose que vous avez une sorte de fonction isprime()):

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

Autres conseils

Pour le premier problème, vous pouvez utiliser la liste compréhensions pour construire une nouvelle liste où chaque élément est pas le nombre sélectionné et non un facteur du nombre sélectionné (voir code). Comparez avec votre liste initiale.

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

Pour le deuxième problème, vérifiez si chaque élément est premier. Sinon, vérifiez les numéros sans facteurs; pour chaque élément, vous pourriez mod sur la liste initiale et vérifier si elle est une liste de zéros. Je suis sûr qu'il ya une façon plus rapide, cependant.

Si L est une liste de numéros non nuls, la liste de ceux qui sont des facteurs d'un nombre N est:

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

La liste sera simplement vide si N n'a pas de facteurs en L, bien sûr.

Je ne sais pas ce que vous entendez par « nombres sans facteurs », à moins que vous voulez dire « nombres premiers » (?) - il y a eu plusieurs SO questions et réponses sur la vérification primalité en Python, j'utiliser gmpy.is_prime (de mon extension gmpy ) mais bien sûr, je suis partial, -.)

Si vous voulez dire, « tous les chiffres qui ont pas de facteurs en L », eh bien, il y a infiniment beaucoup d'entre eux, il est donc un peu difficile de faire une liste de tous. Un générateur sans bornes pour les:

import itertools

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

Quelques optimisations seraient possibles, mais celui-ci est très simple et je suis peu disposé à ajouter des optimisations complexes sans comprendre exactement ce que vous êtes après -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top