Python - 无法转换为int

时间:2012-12-10 21:45:16

标签: python

我的整个代码在下面(不想错过任何内容)。出于某种原因,我不断收到错误,我无法将浮点数转换为int?

import math

def getRange(input):
    if (1 <= input < 10):
        return [1,1,9]
    elif (10 <= input < 190):
        return [2,10,99]
    elif (190 <= input < 2890):
        return [3,100,999]
    elif (2890 <= input < 38890):
        return [4,1000,9999]
    elif (38890 <= input < 488890):
        return [5,10000,99999]
    elif (488890 <= input < 5888889):
        return [6,100000,999999]

def getDigit(input):
    workingRange=getRange(input)
    multi_digit_dec = ((input-workingRange[1])/workingRange[0])+workingRange[1]
    multi_digit_float = math.floor((input-workingRange[1])/workingRange[0])+workingRange[1]
    print multi_digit_float
    multi_digit_int = input(multi_digit_float)
    decimal_remainder = multi_digit_int - multi_digit_dec
##    digit_id = decimal_remainder * len(str(multi_digit_int))
##    actual_digit = str(multi_digit_dec)[digit_id]
##    return actual_digit


getDigit(100)

我的错误是:

Traceback (most recent call last):
  File "C:\Users\Samuel\Desktop\Python\concatenate string of variables and product values.py", line 29, in <module>
    getDigit(100)
  File "C:\Users\Samuel\Desktop\Python\concatenate string of variables and product values.py", line 22, in getDigit
    multi_digit_int = int(multi_digit_float)
TypeError: 'int' object is not callable
>>> 

上面更新的代码反映了名为int的变量输入

5 个答案:

答案 0 :(得分:6)

问题是您使用int作为变量名称,并隐藏了built-in function。重命名变量。

一般来说,值得熟悉names of the built-in functions,以避免此类问题。

答案 1 :(得分:4)

不要将int用作变量名称(函数getDigit)。

答案 2 :(得分:1)

在你的elif语句堆栈中,如果你开始测试输入数是否小于1,那么就不需要检查除第一个之外的范围的下端。这将减少elif中一半的措辞。此外,对于像这样的测试使用循环更紧凑。例如,以下代码生成下面显示的输出。

def getRange(k):
    if k < 1: return None
    e = 1
    for d in [10, 190, 2890, 38890, 488890, 5888889]:
        if k<d:
            return [e, 10**(e-1), 10**e -1]
        e += 1
    return None

for i in range(14):
    print '{:8} {:20}'.format(i * 3**i, getRange(i * 3**i)),
    if i&1: print

输出:

       0 None                        3 [1, 1, 9]           
      18 [2, 10, 99]                81 [2, 10, 99]         
     324 [3, 100, 999]            1215 [3, 100, 999]       
    4374 [4, 1000, 9999]         15309 [4, 1000, 9999]     
   52488 [5, 10000, 99999]      177147 [5, 10000, 99999]   
  590490 [6, 100000, 999999]   1948617 [6, 100000, 999999] 
 6377292 None                 20726199 None

答案 3 :(得分:0)

我想你想要:

multi_digit_int = math.floor(multi_digit_float)

另外,请勿将int用作变量名。

答案 4 :(得分:0)

更新后的代码中行multi_digit_int = input(multi_digit_float)的问题在于input中的参数def getDigit(input):隐藏了内置的input()函数。由于您使用getDigit参数调用100,因此函数input内部是int实例,因此input(multi_digit_float)部分被解释为100(multi_digit_float) },即int调用某事。