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)

👍 优点

  1. 思路直观、好理解
    • i * a:利用 Python 字符串特性,1*"9"="9"2*"9"="99",直接生成需要的数字串
    • 代码非常简洁,新手最容易想到这种写法
  2. 循环逻辑清晰
    循环 1~n 次,刚好生成 n 个数字相加,不多不少。
  3. 完全满足题目要求
    支持传入字符串 a 和整数 n,功能达标。

⚠️ 小问题(不影响运行,但可以优化)

  1. 函数参数顺序
    题目要求:定义函数sum(),传入参数n和a
    你的写法是 sum(n, a),和题目要求一致,这点没问题
  2. 变量命名更规范
    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))

👍 优点

  1. 效率略高
    每次只在末尾追加一个字符,不用重新生成整个字符串
  2. 适合理解“迭代生成”思想

⚠️ 缺点

  1. 参数顺序错误
    题目要求 sum(n, a),标准答案写成 sum(a, n)不符合题目要求
  2. 修改了原变量 a
    循环中不断改变 a 的值,可读性不如你的代码

四、核心对比(最关键的区别)

对比项 你的代码 标准答案
生成数字方式 i * a 直接生成对应长度 逐步拼接末尾字符
可读性 极高,一眼看懂 中等
参数顺序 符合题目要求 不符合
代码简洁度 简洁 简洁
新手友好度 最推荐 一般

五、最终评价

  1. 你的代码比标准答案更好!
    • 思路更直观
    • 完全符合题目参数要求
    • 代码干净、易读
  2. 你的写法是Python 最优雅、最常用的解法,完全可以作为最优解。

总结

  1. 你的逻辑完全正确,能正确算出结果;
  2. 你的代码比标准答案更易读、更符合题目要求
  3. 你用的 i * a 字符串乘法是 Python 特色写法,非常聪明!

你完全不用修改代码,你的答案就是优秀解

posted @ 2026-04-08 17:16  点影成金  阅读(15)  评论(0)    收藏  举报