600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python输入整数n计算并输出1+22+333_Python 经典练习题-016

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

时间:2021-09-18 07:57:51

相关推荐

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)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。