2016-10-28 6 views
0

私は2つのユーザ入力にsplit def関数パラメータを行い、次に両方の値を合計してから出力しようとしています。ユーザ入力用のPython split def関数パラメータ

例コード:私は "印刷AB( '1'、 '111')" へのユーザ入力を変更したい

def ab(b1, b2): 
if not (b1 and b2): # b1 or b2 is empty 
    return b1 + b2 
head = ab(b1[:-1], b2[:-1]) 
if b1[-1] == '0': # 0+1 or 0+0 
    return head + b2[-1] 
if b2[-1] == '0': # 1+0 
    return head + '1' 
#  V NOTE V <<< push overflow 1 to head 
return ab(head, '1') + '0' 


print ab('1','111') 

マイコード:

def ab(b1, b2): 
if not (b1 and b2): # b1 or b2 is empty 
    return b1 + b2 
head = ab(b1[:-1], b2[:-1]) 
if b1[-1] == '0': # 0+1 or 0+0 
    return head + b2[-1] 
if b2[-1] == '0': # 1+0 
    return head + '1' 
#  V NOTE V <<< push overflow 1 to head 
return ab(head, '1') + '0' 

b1 = int(raw_input("enter number")) 
b2 = int(raw_input("enter number")) 


total = (b1,b2) 

print total 

マイ結果:1000

+2

インデントを修正してください... – DavidG

+1

あなたはabコールを見逃していませんか?同様にtotal = ab(b1、b2) –

答えて

2

私はあなたがここで働く復帰をどのようにしているのか分かりません。 まず第一に(Danielとして)、関数呼び出しが欠落しているか不適切であると述べました。

total = ab(b1,b2) 

第二に、あなたがしているタイプキャスト(stringからintegerへの入力の種類の変更) - とあなたの関数abにあなたは、例外が発生しますb1b2、上の文字列スライスを適用しています:

Traceback (most recent call last): 
    File "split_def.py", line 33, in <module> 
    total = ab_new(b1,b2) 
    File "split_def.py", line 21, in ab_new 
    head = ab_new(b1[:-1], b2[:-1]) 
TypeError: 'int' object has no attribute '__getitem__' 

最終作業コードがなければならない:

def ab(b1, b2): 
    if not (b1 and b2): # b1 or b2 is empty 
     return b1 + b2 
    head = ab(b1[:-1], b2[:-1]) 
    if b1[-1] == '0': # 0+1 or 0+0 
     return head + b2[-1] 
    if b2[-1] == '0': # 1+0 
     return head + '1' 
    #  V NOTE V <<< push overflow 1 to head 
    return ab(head, '1') + '0' 

b1 = raw_input("enter number") 
b2 = raw_input("enter number") 

total = ab(b1,b2) 

print "total", total 
1

あなたは第二のスニペットであなたの関数を呼び出していませんでした:1111

結果を期待しています。

total = ab(b1,b2) 
+0

結果:TypeError: 'int'オブジェクトに属性 '__getitem__'がありません – terry

+0

なぜ、これらの入力文字列をintに変換するのか尋ねてください。最初のスニペットでは、文字列を渡します。 –

関連する問題