我的整个代码在下面(不想错过任何内容)。出于某种原因,我不断收到错误,我无法将浮点数转换为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的变量输入
答案 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
调用某事。