Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算一个数字在达到1之前可以减半多少次_Python - Fatal编程技术网

Python 计算一个数字在达到1之前可以减半多少次

Python 计算一个数字在达到1之前可以减半多少次,python,Python,问题是写一个函数,告诉在达到1之前“n”可以减半多少次。我一直在努力使这个代码工作,但它不工作。我以为这一个我有它,但当我尝试用神秘(4)或其他任何东西来测试它时,它总是返回0。有人能告诉我什么需要修理吗。以下是我所拥有的: def mystery(n): count = 0 while n > 0 if n//2 > 1: count = count + 1 print (count) 问题是您没有修改n的值。尝试: def

问题是写一个函数,告诉在达到1之前“n”可以减半多少次。我一直在努力使这个代码工作,但它不工作。我以为这一个我有它,但当我尝试用神秘(4)或其他任何东西来测试它时,它总是返回0。有人能告诉我什么需要修理吗。以下是我所拥有的:

def mystery(n):
    count = 0
    while n > 0
      if n//2 > 1:
         count = count + 1
    print (count)

问题是您没有修改n的值。尝试:

def mystery(n):
    count = 0
    while n > 1:
        n = n // 2
        count += 1
    return count

(未经测试)

对不起,我是个聪明人;)


一旦您修复了已经做出的注释,您的代码将永远运行的原因是您有一个
,而n>0
。因为每次迭代都是通过
n/2
更新的,所以这永远不会是负面的

它不会返回
0
,每次都返回
None
。因为您没有
return
语句。中的
math.log
解决方案有什么问题吗?事实上,请注意,它甚至无法编译,因为(至少)缺少冒号。如果你解决了这个问题,它将在一个无限循环中运行,因为你从不在任何地方修改
n
。因此,如果你想问我们为什么你的代码总是返回0,你必须向我们展示总是返回0的代码,而不是完全不同的代码。你可以使用math.log(n,2)@Yossi,是的,我正准备这么做。这需要我使用一个while循环,我不知道如何做到这一点并让它工作?我更喜欢这种方式,而不是我自己的答案+1。我很惊讶人们甚至在考虑其他解决方案。这是个骗人的问题!
def mystery (n):
    count = 0
    while n > 1:
        n = n / 2
        count = count + 1
    if n == 1:
        return count
    return 0
def mystery (n):
    count = 0
    while n > 1:
        n = n / 2
        count = count + 1
    if n == 1:
        return count
    return 0