Python中的加法运算

Python中的加法运算,python,addition,Python,Addition,我试图制作一个程序,将两个用户输入的数字相加,计算出答案,同时说明有多少进位。进位是如果9+8=17,那么将有1个进位,以此类推。我的程序超出1次进位时遇到问题。因此,到目前为止,这个程序只适用于用户输入的数字,当添加到99以下时。如果你能向我解释一下,我将如何修改这个程序,使它适用于任何数字,那就太好了。我在考虑使用len(number1)和len(number2),然后向后输入用户输入的字符串,使其看起来像str(number1[:-1]),但我不认为它是这样工作的 您的while循环存在致

我试图制作一个程序,将两个用户输入的数字相加,计算出答案,同时说明有多少进位。进位是如果9+8=17,那么将有1个进位,以此类推。我的程序超出1次进位时遇到问题。因此,到目前为止,这个程序只适用于用户输入的数字,当添加到99以下时。如果你能向我解释一下,我将如何修改这个程序,使它适用于任何数字,那就太好了。我在考虑使用len(number1)和len(number2),然后向后输入用户输入的字符串,使其看起来像str(number1[:-1]),但我不认为它是这样工作的

您的while循环存在致命缺陷

  • 每次都将的进位设置为0,然后添加1,因此除了0之外无法返回任何内容
  • 返回在循环中,因此您将始终在第一次迭代后返回
  • 如果1位数不提供进位,则您永远不会进入循环,并返回None
  • 您不提供多个进位,例如999+1中的三个进位
  • 如果从while循环中删除返回,则有一个无限循环:条件的条件永远不会改变。您不需要迭代任何内容
  • 您为函数和变量指定了相同的名称。这不是好的做法
这是你的一个开始,大致基于你最初的常规

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

    定义(): 进位计数=0 str1=str(编号1) str2=str(编号2)

样本输出:

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

这仍然有不足之处需要您修复。最值得注意的是,它不处理多个进位。不过,它应该会让您朝着一个解决方案迈进。

我重新编写了进位函数,使其能够工作,但实现方式完全不同。您首先将数字设置为字符串,以便可以对其进行迭代。然后通过添加0使它们的长度相等,并循环检查每个数字的和(加上进位)是否超过9。如果是,则递增计数器。希望这有助于:

Number #1: 77077
Number #2: 4444

77077
+
4444
-------

81521

Carries : 3
number1=int(输入('Number#1:'))
number2=int(输入('Number#2:'))
l=len(str(1号))
l1=长度(str(编号2))
打印()
def addition():
打印(“”,最大值(1号,2号))
打印(“+”)
打印(“”,最小值(1号,2号))
打印('-'*(最大(l,l1)+2))
打印(“”)
打印(“”,数字1+2)
定义():
num1=str(数字1)
num2=str(数字2)
进位=0
进位=0
c1=l
c2=l
如果(l0):
如果(int(num1[i-1])+int(num2[i-1])+carry>9):
进位=1;
进位+=1
其他:
进位=0
i-=1
回程运载
添加()
打印()
打印('Carries:',Carries())
使用quick fix编辑

有趣的一行解决方案 解释 断言a,b>=0,你可以从数学上证明:每次你有一个进位,数字量就会减少9

9,因为我们是在数字系统10中,所以如果我们有进位,我们在一个数字上“失去10”,进位时我们得到+1

可读解
进位到底是什么意思?while循环中还有一个return语句;这意味着while循环始终只有一次迭代。如果这是您想要的,您就不需要while循环了。如:25+75=100中的进位有2个进位,因为有2个实例的加法大于9。5+5和2+7+1(上一次加法的进位)。你能解释一下c1和c2是什么吗?我非常感谢你的帮助。我只是不想复制、粘贴和理解我正在编程的东西。另外,在while循环中,其中“while(i>0):…”,为了清楚起见,我可以创建一个整数索引?如果你不理解我的措辞,我很抱歉,我只是感到困惑,因为我被教导只能索引字符串。你能解释一下“num1='0'+num1”的含义或执行方式吗?我只是搞不懂为什么我们要把0的字符串加到num1上。是的,c1和c2是每个数字的新大小(连接0的大小)。在while循环中,我们索引一个字符串。这就是为什么在函数的开头,我使用
str()
将number1转换为字符串,我选择将0连接到较小的数字。想想如果你尝试添加999和1会发生什么。如果你只循环一个数字,你会忘记再携带两次。因此,我添加0使其成为999+001,在这种情况下,我们会处理每个数字。如果我回答了你的问题,你应该将答案标记为正确,以便其他人可以看到解决方案。谢谢
Number #1: 77077
Number #2: 4444

77077
+
4444
-------

81521

Carries : 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():
    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())
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 :)
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