在Python和C中检查条件与0进行比较

时间:2015-01-30 12:28:35

标签: python c

def testfun(testValue):
    power = 20
    for i in range(0, 10):
        z = testValue/(10.0**i)
        print("Iteration: "+str(i)+" , z: "+str(z))
        if ( z <= 0 ):
            power = i
            break
    return power
testfun(9000)

我编写了一个小程序来查找最小的整数,其值(在本例中为9000)传递给函数#34; testfun&#34;当参数除以10的幂加到该整数时,将小于零。

然而当它返回给我时(当testValue = 9000时),该值将返回给我20。

我在编写Arduino时在C中遇到了同样的问题,我也尝试用Python测试它,但是我遇到了同样的问题。

有些人能给我一个解释吗?

3 个答案:

答案 0 :(得分:0)

当您使用10.0时,您需要使用Floor Division(//)代替/或在代码的顶层添加from __future__ import division

def testfun(testValue):
  power = 20
  for i in range(0, 10):
    z = testValue//(10.0**i) # or use z = testValue/(10**i)
    #print("Iteration: "+str(i)+" , z: "+str(z))
    if ( z <= 0 ):
        power = i
        break
  return power

print testfun(9000) 

结果:

4
  

Floor Division - 操作数的除法,其中结果是删除小数点后的数字的商。

同样在C中,您需要使用floor将分割结果转换为double:

floor(a/b)

答案 1 :(得分:0)

或者您可以尝试math.floor

import math
def testfun(testValue):
    power = 20
    for i in range(0, 10):
        z = math.floor(testValue / (10.0**i))
        print("Iteration: "+str(i)+" , z: "+str(z))
        if ( z == 0 ):
            power = i
            break
    return power
print testfun(9000)

输出:

Iteration: 0 , z: 9000.0
Iteration: 1 , z: 900.0
Iteration: 2 , z: 90.0
Iteration: 3 , z: 9.0
Iteration: 4 , z: 0.0
4

在您的代码中,您的计算对于浮点类型是准确的。这会带来更多的步骤,但是只有整数部分和舍入才能获得。因此,0.05表示0.如果使用int()将获得相同的结果:

import math
def testfun(testValue):
    power = 20
    for i in range(0, 10):
        z = int(testValue / (10.0**i))
        print("Iteration: "+str(i)+" , z: "+str(z))
        if ( z == 0 ):
            power = i
            break
    return power
print testfun(9000)

输出:

Iteration: 0 , z: 9000
Iteration: 1 , z: 900
Iteration: 2 , z: 90
Iteration: 3 , z: 9
Iteration: 4 , z: 0
4

如果您尝试使用(10**i)的此代码,则相同:

def testfun(testValue):
    power = 20
    for i in range(0, 10):
        z = testValue / (10**i)
        print("Iteration: "+str(i)+" , z: "+str(z))
        if ( z == 0 ):
            power = i
            break
    return power
print testfun(9000)

答案 2 :(得分:0)

您只需检查z<1而不是z<=0。这也适用于C。

def testfun(testValue):
  power = 20
  for i in range(0, 10):
      z = testValue/(10.0**i)
      print("Iteration: "+str(i)+" , z: "+str(z))
      if ( z < 1 ):
          power = i
          break
  return power

print(testfun(9000))

结果:

Iteration: 0 , z: 9000.0
Iteration: 1 , z: 900.0
Iteration: 2 , z: 90.0
Iteration: 3 , z: 9.0
Iteration: 4 , z: 0.9
4

如果您使用//代替/,则会产生:

Iteration: 0 , z: 9000.0
Iteration: 1 , z: 900.0
Iteration: 2 , z: 90.0
Iteration: 3 , z: 9.0
Iteration: 4 , z: 0.0
4