簡體   English   中英

Python - 無法轉換為int

[英]Python - can't convert to int

我的整個代碼都在下面(不想錯過任何內容)。 由於某種原因,我不斷收到錯誤,我無法將浮點數轉換為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的變化

問題是您使用int作為變量名稱,並且會影響內置函數 重命名變量。

一般來說,值得熟悉內置函數名稱 ,以避免此類問題。

不要將int用作變量名(函數getDigit )。

在你的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

我想你想要:

multi_digit_int = math.floor(multi_digit_float)

另外,不要將int用作變量名。

更新代碼中的行multi_digit_int = input(multi_digit_float)的問題在於def getDigit(input):中的參數input def getDigit(input):隱藏了內置的input()函數。 由於你使用參數100調用getDigit ,因此函數input內部是一個int實例,因此input(multi_digit_float)部分被解釋為100(multi_digit_float) ,即int調用某事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM