无法获得用于计算迭代次数的 Python 函数以使其正常工作

我最近开始学习 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,并且确实如此。


SMILET
浏览 178回答 2
2回答

LEATH

你的任务前提不正确:从任何数字开始。如果这个数能被 3 整除,就除以 3。否则,给这个数加 2。最终,无论你从什么数字开始,这个系列都会变成 1。number = 44 + 2 = 6        # 4 is not divisible by 3, add 26 / 3 = 2        # 6 is     divisible by 3 -> 22 + 2 = 4        # 2 is not divisible by 3, add 24 + 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。不工作在所有

米脂

你的代码的事情是它假设当一个数字不再能被 3 整除时它达到 1,那就是关于你的第二个循环,例如 15 可以被 3 整除,它变成 5,它不能被整除,但也不能被整除1.总体上这样想,一个数可能是可整除的,也可能是不可整除的,所以它应该在一个循环中发生,当你达到1时你应该停止。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python