2017-02-07 12 views
1

Так что я пытаюсь сделать программу, когда при вводе числа она даст мне все факторы (12 ->1,2,3,4,6,12). Я только начал программировать совсем недавно, так что могут быть некоторые очень очевидные вещи. Но вот мой кодПоиск всех чисел, которые равномерно делят число

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) 

Хорошо, так что я на самом деле не нужны увольнения на имя, но если вы видите что-то, что бы полностью остановить программу от работы, пожалуйста, указать на это. К сожалению, я вас всех беспокоил, но я не знаю, что еще делать.

+3

Пожалуйста, измените название вопроса на то, что на самом деле содержит информацию о проблеме, с которой вы сталкиваетесь, или о том, о чем вы спрашиваете. Название должно быть четким и достаточно понятным, чтобы быть полезным будущему читателю, который видит его в наборе результатов поиска. Ваше текущее название не содержит ничего полезного или описательного. * Я не знаю, что не так * пропадает впустую; ясно, если вы ** знали, что не так, вам не нужно будет размещать здесь. –

ответ

1

Есть много проблем:

  • Каждое целое число по модулю 1 равен нулю, так как каждое целое число делится на единицу без остатка.

  • Вы удаляете элементы из списка, который вы итерируете, что определенно даст неправильные результаты, если вы не сделаете это осторожно!

  • Вы пытаетесь выполнить рекурсию, но вы не вернете результат рекурсивного вызова. Это возможно, потому что вы работаете с изменяемым списком, но, как правило, это не очень хороший стиль.

  • У вас нет встроенных комментариев, объясняющих, что должна делать эта строка, поэтому трудно дать какие-либо разумные рекомендации относительно того, как улучшить код.

Если вы хотите код, который находит все факторы, рассмотреть что-то вроде этого:

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] 

Это не является оптимальным решением, но он использует рекурсию и дает правильный результат. Просто не вводите отрицательные значения или не поймайте этот случай в функции в начале!

+0

Ничего себе, спасибо человеку. Извините за беспокойство, я не думал, что вам придется переделать всю программу с первого шага. – CliffHanger