练习十八:求这样的一组数据和,s=a+aa+aaa+aaaa+aa...a,其中a为一个数字
例如:2+22+222+2222+22222(此时共有5个数字相加),这里具体几个数字由键盘控制
方法一:普通做法
1 a = int(input("计算要加的数(1-9之间数):")) 2 count = int(input("总共要加多少次:")) 3 sumall = 0 #c初始化最终所求的和 4 for i in range(1,count+1): 5 s = 0 #临时用的变量 6 for j in range(i): 7 s = s + 10 ** j #先计算10**0 8 sumall = sumall + (a * s) #再计算a*s 9 print(sumall)
执行结果:
计算要加的数(1-9之间数):2 总共要加多少次:3 2 24 246
进阶版,起始就是利用了函数
1 a = int(input("计算要加的数(1-9之间数):")) 2 list1 = [a] 3 count = int(input("总共要加多少次:")) 4 sumall = 0 5 def sum_one(a,count): 6 for i in range(1,count): 7 new_a = list1[-1] + a*(10**i) 8 list1.append(new_a) 9 return list1 10 print(sum_one(a,count)) 11 12 for i in list1: 13 sumall += i 14 print(sumall)
执行结果:
计算要加的数(1-9之间数):2 总共要加多少次:2 [2, 22] 24
再来改下:
1 from functools import reduce #python3的reduce内置函数使用时必须导入 2 3 a = int(input("计算要加的数(1-9之间数):")) 4 list1 = [a] 5 count = int(input("总共要加多少次:")) 6 sumall = 0 7 def sum_one(a,count): 8 for i in range(1,count): 9 new_a = list1[-1] + a*(10**i) 10 list1.append(new_a) 11 return list1 12 print(sum_one(a,count)) 13 14 sumall = reduce(lambda arg1, arg2: arg1 + arg2, list1) 15 print(sumall) 16
执行结果:
计算要加的数(1-9之间数):2 总共要加多少次:2 [2, 22] 24
方法二:递归
1 a = int(input("计算要加的数(1-9之间数):")) 2 count = int(input("总共要加多少次:")) 3 sumall = 0 4 def sum_one(a,count): 5 count1 = count - 1 6 if count == 1: 7 return a 8 else: 9 return sum_one(a,count1) + a *(10**(count1)) 10 print("第{}的结果是{}".format(count,sum_one(a,count)))
执行结果:
计算要加的数(1-9之间数):2 总共要加多少次:5 第5的结果是22222