2

私のコード全体は以下のとおりです(何も見逃したくありませんでした)。何らかの理由で、floatを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と呼ばれる変数の変更を反映するために上記で更新されたコード

4

5 に答える 5

6

問題は、変数名として使用していることと、組み込み関数intをシャドウイングしていることです。変数の名前を変更します。

一般に、この種の問題を回避するために、組み込み関数の名前をよく理解しておくことをお勧めします。

于 2012-12-10T21:47:05.453 に答える
4

int変数名(function)として使用しないでください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 = math.floor(multi_digit_float)

intまた、変数名として使用しないでください。

于 2012-12-10T21:47:49.793 に答える
0

multi_digit_int = input(multi_digit_float)更新されたコードの行の問題は、の引数inputdef getDigit(input):組み込みinput()関数を非表示にしていることです。の引数getDigitを使用して呼び出しているため100、関数内にinputintインスタンスがあり、そのinput(multi_digit_float)部分はとして解釈されます。100(multi_digit_float)つまり、int何かを呼び出しています。

于 2012-12-10T22:09:33.083 に答える