练习十八:求这样的一组数据和,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
posted @ 2018-11-13 15:41  阳光宝贝-沐沐  阅读(789)  评论(0编辑  收藏  举报