Python 求平均除一个数的所有数

Python 求平均除一个数的所有数,python,python-3.x,math,helpers,Python,Python 3.x,Math,Helpers,所以我试着做一个程序,当我输入一个数字时,它会给我所有的因子(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 == las

所以我试着做一个程序,当我输入一个数字时,它会给我所有的因子(
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)  

好的,所以我并不真的需要解决冗余问题,但是如果你看到一些东西会完全停止程序的工作,请指出它。很抱歉,我打扰了大家,但我不知道还能做什么。

有很多问题:

  • 模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]
这不是最佳解决方案,但它使用递归并给出适当的结果。只是不要在函数开始时输入负值或捕捉这种情况

双指针法
    # Two Pointer Approach

     ans = []
     
     
     def divisor(val):
         result = []
     
         for i in range(1, val + 1):
             ans.append(i)
     
         i = 0
         j = len(ans) - 1
     
         while i < j:
     
             if ans[i] * ans[j] == ans[-1]:
                 result.append(ans[i])
                 result.append(ans[j])
                 i += 1
             else:
                 j -= 1
     
         return sorted(result)
     
     
     print(divisor(12))


# Output

>>> [1, 2, 3, 4, 6, 12]
ans=[] def除数(val): 结果=[] 对于范围(1,val+1)内的i: 附件(i) i=0 j=len(ans)-1 而i>> [1, 2, 3, 4, 6, 12]
请将您的问题标题改为实际包含您遇到的问题或您提出的问题相关信息的内容。标题应该足够清晰和描述性,以便在一组搜索结果中看到它的未来读者有用。您当前的标题不包含任何有用或描述性内容。我不知道是什么问题浪费了空间;很明显,如果你知道出了什么问题,你就不需要在这里发帖了。哇,谢谢你。很抱歉给您带来麻烦,我认为您不必从第一步开始重新制作整个程序。欢迎使用StackOverflow。虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请编辑您的答案,添加解释,并说明适用的限制和假设。