亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法獲得用于計算迭代次數的 Python 函數以使其正常工作

無法獲得用于計算迭代次數的 Python 函數以使其正常工作

SMILET 2022-01-05 11:25:37
我最近開始學習 Python。我正在課程的控制結構部分做一些練習,一切都很順利,直到我被最后一個問題難住了。我已經研究了三天了,我很確定解決方案很明顯。這是練習中的描述:從任何數字開始。如果這個數能被 3 整除,就除以 3。否則,給這個數加 2。最終,無論從什么數開始,這個數列都會遇到 1。例如,假設我們從數 5 開始:5 不能被 3 整除,所以 5 + 2 = 7 7 不能被 3 整除,所以 7 + 2 = 9 9 可以被 3 整除,所以 9 / 3 = 3 3 可以被 3 整除,所以 3 / 3 = 1從 5 開始,此序列在 4 次迭代中收斂于 1:5 -> 7, 7 -> 9, 9 -> 3, 3 -> 1。編寫一個名為 Joyner 的函數。Joyner 應該有一個參數,一個整數。它應該返回第一次達到 1 所需的迭代次數。我運行了我在頁面上編寫的函數,該函數用不同的整數測試我的函數。每次它給我一個錯誤(說明預期的迭代次數和我的程序計算的次數)時,我設法修復了該整數的程序,但是下面測試的整數又會給我一個錯誤。下面的代碼是我決定來這里尋求幫助之前的最后重寫。def joyner(num):    count = 0    while num % 3 != 0:        # print("num not divisible by 3")        num = num + 2        # print("added 2")        count += 1        # print(count)        if num % 3 == 0:            # print("num is divisible by 3")            num /= 3            # print("divided by 3")            count += 1            # print(count)    while num % 3 == 0:        # print("num is divisible by 3")        num /= 3        # print("divided by 3")        count += 1        # print(count)    return count結果如下:我們發現您提交的內容存在以下問題:我們使用 num = 15 測試了您的代碼。我們希望 Joyner 返回 int 5。但是,它返回了 int 1。我們使用 num = 29 測試了您的代碼。我們希望 Joyner 返回 int 10。然而,它返回了 int 3。我們使用 num = 65 測試了您的代碼。我們希望 Joyner 返回 int 8。但是,它返回了 int 3。我們使用 num = 12 測試了您的代碼。我們希望 Joyner 返回 int 3。但是,它返回了 int 1。我們使用 num = 32 測試了您的代碼。我們希望 Joyner 返回 int 6。但是,它返回了 int 4。請注意,這些錯誤可能會阻止我們以其他方式檢查您提交的內容,因此修復這些問題可能會導致下次出現其他問題。繼續嘗試!這就是調試的全部內容。您提交的以下內容是正確的:我們希望在您的代碼中找到一個名為 Joyner 的函數,我們做到了。我們使用 num = 5 測試了您的代碼。我們希望 Joyner 返回 int 4,并且確實如此。我們使用 num = 27 測試了您的代碼。我們希望 Joyner 返回 int 3,并且確實如此。我們使用 num = 16 測試了您的代碼。我們希望 Joyner 返回 int 3,并且確實如此。
查看完整描述

2 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

你的任務前提不正確:


從任何數字開始。如果這個數能被 3 整除,就除以 3。否則,給這個數加 2。最終,無論你從什么數字開始,這個系列都會變成 1。


number = 4


4 + 2 = 6        # 4 is not divisible by 3, add 2

6 / 3 = 2        # 6 is     divisible by 3 -> 2

2 + 2 = 4        # 2 is not divisible by 3, add 2

4 + 2 = 6        # 4 is not divisible by 3, add 2  --> cycle - no solution.

如果有解決方案,則會找到它:


def joyner(num): 

    count = 0

    seen = set()

    while num != 1:

        if num in seen: 

            return None

        else:

            seen.add(num)

        if num % 3 == 0:

            num = num // 3

        else:

            num += 2

        count += 1


    return count

測試一下:


i = 0    

for k,c in d.items():

    if c is None:

        continue

    print(k,":",c, end="     ")

    i += 1

    if i % 6 == 0:

        print()

        i = 0

從 1 到 99 的解的輸出:


 1 : 0       3 : 1      5 : 4      7 : 3     9 : 2      11 : 7     

13 : 6      15 : 5     17 : 6     19 : 5     21 : 4     23 : 5     

25 : 4      27 : 3     29 : 10    31 : 9     33 : 8     35 : 9     

37 : 8      39 : 7     41 : 8     43 : 7     45 : 6     47 : 9     

49 : 8      51 : 7     53 : 8     55 : 7     57 : 6     59 : 7     

61 : 6      63 : 5     65 : 8     67 : 7     69 : 6     71 : 7     

73 : 6      75 : 5     77 : 6     79 : 5     81 : 4     83 : 13     

85 : 12     87 : 11    89 : 12    91 : 11    93 : 10    95 : 11     

97 : 10     99 : 9     

不可行:


[ 2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 

 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 

 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]   

您的算法僅適用于奇數。


我們使用 num = 12 測試了您的代碼。我們希望 Joyner 返回 int 3。但是,它返回了 int 1。


不工作在所有


查看完整回答
反對 回復 2022-01-05
?
米脂

TA貢獻1836條經驗 獲得超3個贊

你的代碼的事情是它假設當一個數字不再能被 3 整除時它達到 1,那就是關于你的第二個循環,例如 15 可以被 3 整除,它變成 5,它不能被整除,但也不能被整除1.

總體上這樣想,一個數可能是可整除的,也可能是不可整除的,所以它應該在一個循環中發生,當你達到1時你應該停止。


查看完整回答
反對 回復 2022-01-05
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號