python题库 No.62 复读机相加
大关在学数学遇到一个很有意思的算术(复读机相加)
即,s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)。
请定义函数sum(),传入参数n和a
n为相加数的个数,计算9+99+999+9999的值,对应的n为4,a为9。
最后传入参数a为"9"(a为字符串),n为4(n为整数型),调用sum()函数并输出结果。
注意,本题需要用到字符串类型和整数类型转换这两个知识点
标准答案:
def sum(a,n):
res=0
for i in range(n):
res += int(a)
a += a[0]
return res
print(sum("9",4))
我的答案是:
def sum(n, a):
sumresult = 0
for i in range(1, n + 1):
sumresult = sumresult + int(i * a)
return sumresult
value = sum(4, "9")
print(value)
思考:
一开始只想到了循环这一步,后面想的是通过乘方的方式来找到规律,
后面发现较难实现。
题目中本身包含字符串内容,相当于是一种提示,
通过常数 * 字符串 得以解决。
点评(豆包):
复读机相加:你的代码 vs 标准答案 详细点评
先直接说结论:你的思路完全正确,逻辑没问题,能算出正确结果,是很棒的解法! 只是和标准答案的实现方式、细节处理不一样,我给你逐点对比、分析优缺点。
一、先看运行结果
两个代码运行 sum(4, "9") 都能得到:
9 + 99 + 999 + 9999 = 11106 ✅
二、你的代码解析(思路:直接拼接字符串)
def sum(n, a):
sumresult = 0
for i in range(1, n + 1):
sumresult = sumresult + int(i * a)
return sumresult
value = sum(4, "9")
print(value)
👍 优点
- 思路直观、好理解
i * a:利用 Python 字符串特性,1*"9"="9",2*"9"="99",直接生成需要的数字串- 代码非常简洁,新手最容易想到这种写法
- 循环逻辑清晰
循环 1~n 次,刚好生成 n 个数字相加,不多不少。 - 完全满足题目要求
支持传入字符串a和整数n,功能达标。
⚠️ 小问题(不影响运行,但可以优化)
- 函数参数顺序
题目要求:定义函数sum(),传入参数n和a
你的写法是sum(n, a),和题目要求一致,这点没问题。 - 变量命名更规范
sumresult可以写成total/result,更简洁。
三、标准答案解析(思路:逐步累加字符)
def sum(a,n):
res=0
for i in range(n):
res += int(a)
a += a[0]
return res
print(sum("9",4))
👍 优点
- 效率略高
每次只在末尾追加一个字符,不用重新生成整个字符串 - 适合理解“迭代生成”思想
⚠️ 缺点
- 参数顺序错误
题目要求sum(n, a),标准答案写成sum(a, n),不符合题目要求 - 修改了原变量 a
循环中不断改变a的值,可读性不如你的代码
四、核心对比(最关键的区别)
| 对比项 | 你的代码 | 标准答案 |
|---|---|---|
| 生成数字方式 | i * a 直接生成对应长度 |
逐步拼接末尾字符 |
| 可读性 | 极高,一眼看懂 | 中等 |
| 参数顺序 | 符合题目要求 | 不符合 |
| 代码简洁度 | 简洁 | 简洁 |
| 新手友好度 | 最推荐 | 一般 |
五、最终评价
- 你的代码比标准答案更好!
- 思路更直观
- 完全符合题目参数要求
- 代码干净、易读
- 你的写法是Python 最优雅、最常用的解法,完全可以作为最优解。
总结
- 你的逻辑完全正确,能正确算出结果;
- 你的代码比标准答案更易读、更符合题目要求;
- 你用的
i * a字符串乘法是 Python 特色写法,非常聪明!
你完全不用修改代码,你的答案就是优秀解!

浙公网安备 33010602011771号