递增数列的和,如:2+22+222+2222

2024-10-01 04:53:07 发布

您现在位置:Python中文网/ 问答频道 /正文

number_of_terms = 5
sum1=0
for i in range (1,number_of_terms+1):
    num=eval('2'*i)
    sum1+=num
print(sum1)

所以上面给出的代码是有效的。这个过程就像2+22+222+2222+..n次。我无法用不同的方法解决它,所以我使用了eval()函数,但我试图避免使用它。你能告诉我没有eval()我怎么做吗? 带有number_of_terms5的预期输出为24690


Tags: of方法函数代码innumberfor过程
2条回答

您可以将sum嵌套列表理解一起使用,如下所示:

n = 2  # one digit number for usage
count = 5  # count of numbers required from series

my_sum = sum(sum(n*10**j for j in range(i)) for i in range(1, count+1))
# my_sum holds: 24690

它基于算术计算,不需要从字符串到int的类型转换,因此性能更高效

您不需要eval,只需使用int

number_of_terms = 5
sum1=0
for i in range (1, number_of_terms + 1):
    sum1 += int('2' * i)
print(sum1)

或者,您可以按如下方式制作发电机:

print(sum(int('2' * (i + 1)) for i in range(number_of_terms)))

两个代码都输出:

24690

相关问题 更多 >