Python如何从后往前按位置权重计算数字字符串各位乘积总和
问题原因
你现有代码中使用national.index(n)获取索引的方式存在缺陷,当字符串内有重复字符时,该方法只会返回字符第一次出现的位置,无法拿到当前遍历字符的真实索引,所以计算结果不符合预期。
正确实现代码
写法1:基础循环实现(易理解)
national = '2080880579' result = 0 for idx, char in enumerate(national): weight = 10 - idx # 若要和示例计算逻辑一致仅算到权重2,保留以下判断即可 if weight < 2: break result += int(char) * weight print(result) # 输出201
写法2:简洁生成器表达式
national = '2080880579' result = sum(int(char) * (10 - idx) for idx, char in enumerate(national) if 10 - idx >= 2) print(result) # 输出201
逻辑说明
enumerate()函数可以在遍历字符串的同时拿到每个字符的索引(从0开始计数)和字符本身,完美规避了重复字符索引匹配错误的问题。- 权重计算规则为第一位(索引0)对应10,因此直接用
10 - 索引值就能得到对应位的权重,和需求完全匹配。 - 如果你需要按“依此类推”的规则计算到最后一位(权重1),去掉代码里的判断条件即可,最终输出结果为210。
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

