2012-04-18 5 views
0

私はループTypeErrorを取得せずに文字列を乗算するにはどうすればよいですか? 'function'型以外のシーケンスでシーケンスを掛けることはできませんか?

例ながら機能を使用して数値を表し、記号、印刷できるようにしたい:1つの機能を印刷する連結しようとしている、働くかもしれないが

number = 250 
# symbols 
C = 100 
^ = 50 

CC^ 

を印刷する必要がありますが2つ以上のプリント機能がタイプエラーに繋がります:

TypeError: can't multiply sequence by non-int of type 'function' 

number = 251; 
def numeral_C(number_par): 
    while number_par >=100: 
    numeral_C = number_par/100 
    print "C"*numeral_C, 
    number_par = number_par - numeral_C*100 
    return "" 
def numeral_UpArrow(number_par): 
    while number_par >=50: 
    numeral_upArrow = number_par/50 
    print "^"*numeral_UpArrow, #error 
    number_par = number_par - numeral_UpArrow*50 
    return "" 
etruscan_C = str(numeral_C(number)) 
etruscan_UpArrow = str(numeral_UpArrow(number)) #error 

print etruscan_C+etruscan_UpArrow 

Traceback (most recent call last): 
    File "/Applications/Wing IDE/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 15, in 
    File "/Applications/Wing IDE/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 11, in numeral_UpArrow 

**TypeError: can't multiply sequence by non-int of type 'function' 

私は、エラーを出さずに2つ以上の機能を印刷する方法はありますか?

+0

これは宿題の問題ですか?もしそうなら、あなたは '宿題'タグを追加する必要があります。 – agf

答えて

0

他の人が国家として、あなたが割り当てに再利用して、既に関数と同じ名前で何か問題があります:あなたがコメントで見ることができるように、単純な名前変更を

def numeral_C(number_par): 
    while number_par >=100: 
     #this numeral_C is already a known function name, now youre reusing it as an int 
     numeral_C = number_par/100 
     #you're using print inside a function, not a best practice, but..... 
     print "C"*numeral_C, 
     #uncomment the below line to see why the loop is unnecessary 
     #print '%d = %d - %d' % (number_par - numeral_C*100, number_par, numeral_C*100) 
     number_par = number_par - numeral_C*100 
    return "" 
    #you're printing, rather than returning, making this useless, and you're str()-ing the "" on return 

number = 25101; 
etruscan_C = str(numeral_C(number)) 
print 

def numeral_c(number_par): 
    num_c = number_par/100 
    return 'C'*num_c 

print numeral_c(number) 

をあなたの関数はこれを治療し、おそらくあなたの変数の名前を変更します。しかし、私が "大きな"問題と考えるものに...

私はあなたの元の数学が不必要なループを作るように感じます。あなたの数字Cの動作を私の数字_Cと比較してください:両方とも同じ数字-Cの結果を返しますが、もう1つは(Cの文字列としての戻り値を持つことによって)再利用可能です。

現実的には、number_parの再割り当てに基づいて、ループが2回目に発生するケースは見つかりません。最も近いフロアド100倍を減算します。言い換えれば、その論理の多くは役に立たない。

'C'*int(number/100) 
0

あなたは両方とも、その関数の中の関数名であるnumeric_UpArrow(関数)に代入することによって、&を使用しています。

+0

いいえ、彼はいません。大文字を調べてください。彼は '数字の倍音 'に割り当てます。彼の問題は彼が描写しているように - 機能によって倍増しようとすることです。 – agf

+1

私は、大文字小文字と小文字の区別が間違っているとは思えません。 –

+0

この場合、 'TypeError'を持っていなかったので気がついただけです - 2つの関数のうちの最初の関数が正常に動作します。 – agf

関連する問題