2

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

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 的变量的变化以输入

4

5 回答 5

6

问题是您将int其用作变量名,这会影响内置函数。重命名变量。

一般来说,有必要熟悉内置函数的名称,以避免此类问题。

于 2012-12-10T21:47:05.453 回答
4

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

于 2012-12-10T21:46:09.920 回答
1

在您的语句堆栈中elif,如果您首先测试输入数字是否小于 1,则无需检查除第一个之外的范围的下端。这将减少elif's 中一半的措辞。此外,使用循环进行这样的测试更紧凑。例如,下面的代码产生如下所示的输出。

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
于 2012-12-10T22:23:39.963 回答
0

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

于 2012-12-10T22:09:33.083 回答
0

我想你想要:

multi_digit_int = math.floor(multi_digit_float)

另外,不要int用作变量名。

于 2012-12-10T21:47:49.793 回答