2016-03-02 7 views
3
number1 = int(input('Number #1: ')) 
number2 = int(input('Number #2: ')) 
l = len(str(number1)) 
l1 = len(str(number2)) 
print() 

def addition(): 
    print(' ',max(number1,number2)) 
    print('+') 
    print(' ',min(number1,number2)) 
    print('-'*(max(l,l1)+2)) 
    print(' ') 
    print(' ',number1+number2) 

def carries(): 
    while (int(str(number1)[::-1])+int(str(number2)[::-1]))>=10: 
     carries = 0 
     carries = carries + 1  
     return carries 

addition() 


print() 
print('Carries : ',carries()) 

Я пытаюсь создать программу, которая добавляет два пользовательских ввода номера и вычисляет ответ, а также указывая, сколько носителей есть. Выполняется, если 9 + 8 = 17, тогда будет 1 перенос и т. Д. У меня проблемы с тем, что моя программа выходит за пределы 1-го. Таким образом, эта программа до сих пор применима только для пользовательских номеров ввода, которые при добавлении ниже 99. Если бы вы могли объяснить мне, как я хотел бы изменить эту программу, чтобы сделать ее применимой к любым числам, это было бы здорово. Я думал об использовании len (number1) и len (number2), а затем вводил строку ввода пользователя назад, чтобы он выглядел как str (number1 [:: - 1])), но я не думаю, что он работает так ,Дополнение содержит Python

+0

Что именно вы имеете в виду под ручной клади? – Andriko13

+0

У вас также есть оператор return внутри цикла while; это означает, что цикл while всегда * имеет только 1 итерацию. Если это то, что вы хотите, вам не нужен цикл while. – Andriko13

+0

A перенос, как в случае: 25 + 75 = 100 имеет 2 переноса, поскольку имеется 2 экземпляра, в которых добавление больше 9. 5 + 5 и 2 + 7 + 1 (перенос из предыдущего добавления). – CoTaNgO

ответ

0

Я переписал вашу функцию переноса, чтобы она работала, но реализация полностью отличается. Сначала вы делаете строки чисел, чтобы вы могли проходить через них. Затем вы делаете их равной длине, добавляя 0 и пробирая каждую цифру, чтобы проверить, превышает ли их сумма (плюс перенос) 9. Если это так, увеличьте счетчик.Надеюсь, что это помогает:

number1 = int(input('Number #1: ')) 
number2 = int(input('Number #2: ')) 
l = len(str(number1)) 
l1 = len(str(number2)) 
print() 
def addition(): 
    print(' ',max(number1,number2)) 
    print('+') 
    print(' ',min(number1,number2)) 
    print('-'*(max(l,l1)+2)) 
    print(' ') 
    print(' ',number1+number2) 

def carries(): 
    num1 = str(number1) 
    num2 = str(number2) 
    carry = 0 
    carries = 0 
    c1 = l 
    c2 = l 
    if (l < l1): 
     while (c1 < l1): 
      num1 = '0' + num1 
      c1+=1 
    if (l1 < l): 
     while (c2 < l): 
      num2 = '0' + num2 
      c2+=1 
    i = c1 
    while (i > 0): 
     if (int(num1[i-1])+int(num2[i-1])+carry > 9): 
      carry = 1; 
      carries+=1 
     else: 
      carry = 0 
     i-=1 
    return carries 
addition() 


print() 
print('Carries : ',carries()) 

Отредактировано с быстро исправить

+0

Не могли бы вы объяснить, что такое c1 и c2? Я очень ценю помощь. Я просто хочу не копировать и вставлять и не понимать, что я программирую. Кроме того, в вашем цикле while, где «while (i> 0): ..», просто для ясности я могу сделать целочисленное индексирование? Если вы не понимаете мою формулировку, я извиняюсь, я просто смущен, потому что меня учили, что вы можете только индексировать строки. – CoTaNgO

+0

Не могли бы вы также объяснить значение или выполнение «num1 = '0' + num1"? Я просто смущен, почему мы добавляем строку от 0 до num1. – CoTaNgO

+0

Да, c1 и c2 - это новые размеры каждого номера (размер с конкатенированными 0). В цикле while мы индексируем строку. Вот почему в начале функции я конвертирую число 1 в строку с помощью 'str()' – Andriko13

0

Ваш в то время как цикл является смертельно ошибочным.

  • Вы устанавливаете несет до 0 каждый раз, а затем добавить 1, так что нет никакого способа вернуть ничего, кроме 0.
  • Ответный находится внутри цикла, так что вы всегда будете возвращаться после первой итерации ,
  • Если эти цифры не обеспечивают перенос, то вы никогда не попадаете в петлю и не возвращаетесь Нет.
  • Вы не предусматривают кратному несет, например, три несет в 999 + 1.
  • Если удалить возврат из в то время как цикла, то есть бесконечный цикл: условия условия никогда не меняется. Вы ничего не перебираете.
  • Вы указали функцию и переменную с тем же именем. Это не очень хорошая практика.

Это начало для вас, основанное на вашей первоначальной рутине.

  • Установите количество переносов 0.
  • Преобразования двух чисел в строки и найти общую (короче) длину.
  • До тех пор, пока у вас есть цифры в , цифры, возьмите цифры (перемещаясь с правого конца) и посмотрите, требуется ли их числовая сумма. Если да, увеличьте счетчик.

    Защиту несет(): carry_count = 0 str1 = ул (number1) str2 = ул (number2) выход

    for digit_pos in range(1, min(len(str1), len(str2)) + 1): 
        if int(str1[-digit_pos]) + int(str2[-digit_pos]) >= 10: 
         carry_count += 1 
    return carry_count 
    

Пример:

Number #1: 77077 
Number #2: 4444 

77077 
+ 
4444 
------- 

81521 

Carries : 3 

Это до сих пор недостатки для вас исправить. Прежде всего, он не обрабатывает несколько переносов. Тем не менее, это должно заставить вас двигаться к решению.