如何在Python的sum()函数内实现变量i的逐次递增?
解决Disarum Number判断中sum()函数替代循环的问题
你原来的生成器写法无法实现i递增的原因是:生成器表达式内部不能像普通循环那样迭代时更新外部计数器变量并持续生效。要实现用sum()替代原循环的需求,可以利用Python的enumerate()函数来自动获取每个数字的位置索引(作为指数),无需手动维护计数器i。
解决方案代码
n = input("输入一个数字: ") # 使用enumerate从1开始计数,同时获取位置(指数)和数字字符 disarum_sum = sum(int(digit)**power for power, digit in enumerate(str(n), start=1)) if int(n) == disarum_sum: print("Disarum Number") else: print("Non-Disarum Number")
代码解释
enumerate(str(n), start=1):将数字转为字符串后,enumerate会返回一个迭代器,每次迭代输出一个元组(power, digit),其中power从1开始递增(对应原循环的i),digit是当前的数字字符。int(digit)**power:把字符转为整数后,计算它的power次方,和原循环中int(x)**i的逻辑完全一致。sum():直接对所有计算结果求和,替代原循环中手动累加s的操作。
对比原循环逻辑
原循环中手动维护i并累加求和的逻辑,被enumerate+sum的组合完全覆盖,代码更简洁且可读性更强。
内容的提问来源于stack exchange,提问作者Abhay Kumar
相关产品推荐
相关产品推荐

