2017-02-07 1 views
1

Donc j'essaye de faire un programme que quand j'entre un nombre il me donnera tous les facteurs (12 ->1,2,3,4,6,12). Je n'ai commencé à programmer que très récemment, donc il peut y avoir des choses très évidentes. Mais voici mon codeTrouver tous les nombres qui divisent uniformément un nombre

numbers = [1] 
newnum = 1 
chosen = int(input("Enter what you want the factors of: ")) 
def factors(numbers,newnum,chosen): 
    lastnum = numbers[-1] 
    if (chosen == lastnum): 
     for number in numbers: 
      if (number % 1 != 0): 
       numbers.remove(number) 
       print (numbers) 
      else: 
       factors(numbers,newnum,chosen) 
    else: 
     newnum = numbers[-1] + 1 
     numbers.append(newnum) 
     print (numbers) 
     factors(numbers,newnum,chosen) 

factors(numbers,newnum,chosen) 

Ok, donc je ne suis pas vraiment besoin des licenciements traités mais si vous voyez quelque chose qui arrêterait complètement le programme de travail s'il vous plaît signaler. Désolé je vous ai dérangé avec tout cela mais je ne sais pas quoi faire d'autre.

+3

S'il vous plaît [modifier] le titre de votre question pour quelque chose qui contient réellement des informations sur le problème que vous rencontrez ou la question que vous posez. Le titre doit être suffisamment clair et descriptif pour être utile à un futur lecteur qui le voit dans un ensemble de résultats de recherche. Votre titre actuel ne contient rien d'utile ou de descriptif. * Je ne sais pas ce qui ne va pas * c'est de l'espace gaspillé; De toute évidence, si vous ** saviez ** ce qui n'allait pas, vous n'auriez pas besoin de poster ici. –

Répondre

1

Il y a beaucoup de problèmes:

  • Chaque nombre entier modulo 1 est égal à zéro parce que chaque entier est divisible par un sans reste.

  • Vous supprimez des éléments de la liste que vous itérez, ce qui donnera certainement des résultats erronés si vous ne le faites pas avec précaution!

  • Vous essayez de faire de la récursivité mais vous ne renvoyez pas le résultat de l'appel récursif. C'est possible parce que vous opérez sur une liste mutable mais ce n'est généralement pas vraiment bon style

  • Vous n'avez aucun commentaire en ligne expliquant ce que cette ligne est censée faire, il est donc difficile de donner des conseils raisonnables sur la façon d'améliorer le code.

Si vous voulez un code qui trouve tous les facteurs, tenez compte quelque chose comme ceci:

chosen = int(input("Enter what you want the factors of: ")) 

def factors(chosen, currentnum=None, numbers=None): 
    # Recursion start, always append 1 and start with 2 
    if numbers is None: 
     numbers = [1] 
     currentnum = 2 
    # We're at the last value, it's always divisible by itself so 
    # append it and return 
    if currentnum == chosen: 
     numbers.append(currentnum) 
     return numbers 
    else: 
     # Check if the chosen item is divisible by the current number 
     if chosen % currentnum == 0: 
      numbers.append(currentnum) 
     # Always continue with the next number: 
     currentnum += 1 
     return factors(chosen, currentnum, numbers) 


>>> factors(chosen) 
Enter what you want the factors of: 12 
[1, 2, 3, 4, 6, 12] 

Ce n'est pas la solution, mais il utilise la récursivité et donne un bon résultat. Il ne suffit pas d'entrer des valeurs négatives ou d'attraper ce cas dans la fonction au début!

+0

Wow, merci l'homme. Désolé pour le problème, je ne pensais pas que vous auriez à refaire tout le programme de la première étape. – CliffHanger