添加在Python中

时间:2016-03-02 00:26:45

标签: python addition

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]))但我不认为它的工作原理是这样的。

3 个答案:

答案 0 :(得分:0)

while 循环存在致命缺陷。

  • 每次将进位设置为0,然后加1,所以除了0之外无法返回任何内容。
  • 返回在循环内部,因此您将在第一次迭代后始终返回。
  • 如果那些数字不提供进位,那么你永远不会进入循环,并返回
  • 您不提供多个承载,例如999 + 1中的三个承载。
  • 如果从 while 循环中删除返回,则会出现无限循环:条件的条款永远不会改变。你不会迭代任何东西。
  • 你给了一个函数和一个同名的变量。这不是一个好习惯。

这是一个适合你的开始,基于你的原始程序。

  • 将进位数设为0。
  • 将两个数字转换为字符串,找到常用(较短)的长度。
  • 只要两个数字中都有数字,就抓住数字(从右端移动)并查看它们的数字和是否需要进位。如果是,请递增计数。

    def carry():     carry_count = 0     str1 = str(number1)     str2 = str(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

这仍有一些不足之处需要你解决。最值得注意的是,它不能处理多个载体。但是,它应该让你走向解决方案。

答案 1 :(得分: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())

使用快速修复编辑

答案 2 :(得分:0)

有趣的单线解决方案

def numberOfCarryOperations(a, b):
    f=lambda n:sum(map(int,str(n)));return(f(a)+f(b)-f(a+b))/9

# f is the digitSum function :)

说明

断言a,b> = 0,你可以用数学证明:每次进位时,digitSum减少9。

9,因为我们在数字系统10中,所以我们输了10&#34;如果我们携带一个数字,我们获得+1作为进位。

可读解决方案

def digitSum(n):
    return sum(map(int,str(n)))

def numberOfCarryOperations(a, b)
    # assert(a >= 0); assert(b >= 0);
    return (digitSum(a) + digitSum(b) - digitSum(a+b)) / 9