描述
用户输入一个小于10的正整数,求1 + 12 + 123 + 1234 + …… 的前n项的和,当输入大于或等于10时,输出“data error!”
输入格式
一个小于10的正整数
输出格式
数列的前 n 项和或“data error!”
这是一个前n项累加的问题,一个循环就可以解决,难点是通项的构建,有这样几种方法:
后一项为前一项的10倍与下一个数字的加和:
010+1,110+2,(110+2)10+3,((110+2)10+3)*10+4….
tmp = 0for i in range(1,10):tmp = tmp * 10 + iprint(tmp,end=' ')# 1 12 123 1234 12345 123456 1234567 12345678 123456789 整数
n = int(input())if n >= 10:print('data error!')else:sum = 0tmp = 0for i in range(1,n + 1):tmp = tmp * 10 + isum = sum +tmpprint(sum)
- 构造一个字符串 num = ‘123456789’ 通过对其切片获得各项
 
num = '123456789'for x in range(1,10):print(num[:x],end=' ')# 1 12 123 1234 12345 123456 1234567 12345678 123456789 字符串
n = int(input())if n >= 10:print('data error!')else:sum = 0num = '123456789'for i in range(1,n + 1):sum = sum +int(num[:i])print(sum)
- 用列表推导式产生一个包含各项数的列表
 
num = '123456789'ls = [int(num[:x]) for x in range(1,10) ]print(ls)# [1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789] 整数
n=int(input())if n >= 10:print('data error!')else:num = '123456789'print(sum([int(num[:x]) for x in range(1,n + 1) ]))
列表推导式与条件表达式共用
n=int(input())print('data error!') if n >= 10 else print(sum([int('123456789'[:x]) for x in range(1,n + 1) ]))
n = int(input())print(sum([ int(''.join(map(str,range(1,i+1)))) for i in range(1,n + 1)])) if n < 10 else print('data error!')
