2016-10-28 3 views
0

Я пытаюсь выполнить параметр функции разделения def в два пользовательских ввода, а затем суммировать оба значения, а затем распечатать.Параметр функции дефиниции разделения Python для ввода пользователем

Пример кода:

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') 

Я хотел бы изменить "печать 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 

Мой результат: +1111

Ожидать результат: 1000

+2

Пожалуйста, исправьте свой отступ ... – DavidG

+1

Разве вы не пропустили звонок? как total = ab (b1, b2) –

ответ

2

Я не знаю, как вы возвращаетесь сюда. Прежде всего (как сказал Даниил), у вас есть вызов функции отсутствующий/неправильный.

total = ab(b1,b2) 

Во-вторых, вы типа литья (изменение типа ввода от string к integer) - и в функции ab вы подаете строки нарезку на b1 и b2, что приведет к исключению:

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

Вы не называли вашу функцию во втором фрагменте.

total = ab(b1,b2) 
+0

Результат: TypeError: объект 'int' не имеет атрибута '__getitem__' – terry

+0

Итак, спросите себя, почему вы конвертируете эти входные строки в int. В первом фрагменте вы передаете строки. –