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