找到n可以分成两半的函数

978*_*563 3 python

基本上,我需要一个将n除以2的函数,并返回它可以完成的次数.

编码到目前为止:

def div(n):
    while n >= 0:
        n / 2
    return n
Run Code Online (Sandbox Code Playgroud)

我知道我必须使用while循环,但我对第三行编码没有信心.有人能告诉我我做错了什么吗?

例子:

>>> div(4)
2
>>> div(7)
2
Run Code Online (Sandbox Code Playgroud)

Eel*_*vex 19

整数n可以除以2:floor(log(n)/log(2))次.

  • 很好的答案。数学让我的电脑感觉更好! (2认同)
  • 或者更短:“floor(log(n, 2))”? (2认同)

Tho*_*nan 9

/不执行任务.既然你正在返回n而不是改变它的价值,我认为你应该从那里开始.你的其他提示是=和%.


nco*_*lan 5

(请注意,我将您的示例视为定义函数的预期行为。正如 Tomas 和 Carl 所指出的,目前描述不是特别清楚。)

最新版本的 Python 实际上提供了bit_length()一种关于整数的方法,可以很容易地找到答案。

虽然这并不能真正帮助您解决家庭作业问题(它为您提供了答案,但并不能帮助您理解为什么会这样),但您可以使用它来创建参考函数以与您的实际答案进行比较:

def expected(n):
    return n.bit_length() - 1

>>> expected(4)
2
>>> expected(7)
2
>>> expected(33)
5
Run Code Online (Sandbox Code Playgroud)

需要考虑的几点:

  • 您的循环条件不正确,因为重复除法永远不会将值减少到零以下。鉴于示例数据,您的终止条件需要有所不同。考虑您对0,1或 的输入期望的答案2
  • 您需要n在每次通过循环时更改 的值。否则,您的循环将永远不会结束。
  • n你真正想要的值要返回?也许在循环过程中您应该跟踪其他一些东西,这些东西将成为您的返回值(仔细查看其他一些建议的答案应该有助于解决这一点)。