python输入整数n计算并输出1+22+333_Python 经典练习题-016

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

题目分析:观察可以看出,2+22+222+2222+2222 可以看做是(2+22+222+2222)再加上22222。也就是说如果设数字为 3,个数为5,它的结果就等于前4个数(3+33+333+3333)计算出来的和再加5个3,即"33333"。我们首先要实现当用户输入3和5的时候,能够自动生成33333,输入3和4的时候能够生成3333,才能再想办法求和。

这一步怎么实现呢?2 其实可以看做是2x10º+0,22 可以看做是2x10¹+2x10º,222 可以看做是2x10²+2x10¹+2x10º,2222 可以看做是2x10³+2x10²+2x10¹+2x10º,这样我们这个函数就好定义了。先算2x10º,然后算2x10¹....

def get_num(n,m):#n为数字,m 为该数字的个数

result = 0

for i in range(m): #从n的0次方算到n的m次方

result = result + n*10**i #将上一次计算的结果与本次计算的结果相加。

return result

print(get_num(2,5))

#>>> 22222

#测试没有问题

但是,题目中最终要求的结果并不是求出 22222,而是要求出2+22+222+2222+22222 的总和。根据题目分析部分可以看出,这个问题可以用递归的思想来解决。具体逻辑就是结果始终等于前面一坨之和+最后生成的一个数字,于是函数我们就可以定义成这样:

#正式代码 Part-1

def add_(n,m):

current = 0

for i in range(m):

current += n*(10**i)

if m == 1:

return current

return current+add_(n,m-1)

最后,题目要求接受用户输入,为了简单,我们设置为用户在一行内输入这两个数,并用逗号隔开。注意,凡是需要接受用户输入的,都要考虑用户的输入是不是合法,有没有按照我们的规则进行输入,如果没有按照规格输入怎么处理等等。这里我们用 While + try+except来检查输入部分,如果输入不正确,直接返回要求用户重新输入:

#正式代码 Part-2

while True:

temp = input('请分别输入数字以及数字的个数,用英文逗号隔开:')

try:

n = int(temp.split(',')[0])

m = int(temp.split(',')[1])

except ValueError:

print(f'你输入的{temp}有误,请重新输入' )

continue

except IndexError:

print('输入错误')

continue

break

add_(n,m)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值