簡體   English   中英

找出所有能整除一個數的數

[英]Finding all numbers that evenly divide a number

所以我正在嘗試制作一個程序,當我輸入一個數字時,它會給我所有的因素( 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 為模的整數都是零,因為每個整數都可以被 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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM