列表符号异常,求14个连续数位最大乘积代码第7行报错
搞定你的14位连续数位最大乘积代码问题
嘿,看你遇到了代码语法异常和逻辑问题,我帮你拆解一下问题所在,然后给你修复后的方案:
先说说你提到的第7行异常
你代码里的缩进完全错误!numbers.append(into)和index += 1没有缩进在for循环块里,这直接导致Python解析代码时结构混乱,看似是括号、逗号的语法报错,本质是缩进错误引发的解析异常,不是符号本身写错了。
还有几个致命的逻辑问题
- 无意义的递归调用:你在函数里直接调用
iteration(number)却没加任何终止条件,这会触发无限递归,很快就会栈溢出报错,完全没必要这么做。 - 循环逻辑错误:你当前的循环只计算了一次14位的乘积,根本没遍历所有可能的连续14位数位组合,完全不符合需求。
- 结果取反:你返回
sorted(numbers)[0],这是拿列表里最小的乘积,但你要的是最大乘积,应该取排序后的最后一个元素sorted(numbers)[-1]。
修复后的完整代码
def max_14_digit_product(number): # 把输入数字转成单个整数组成的列表,方便逐个取数位 digits = [int(d) for d in str(number)] max_product = 0 # 遍历所有合法的起始索引,确保能取到14个连续数位 for start_idx in range(len(digits) - 13): current_product = 1 # 计算当前起始点开始的14个数位乘积 for i in range(14): current_product *= digits[start_idx + i] # 更新最大乘积 if current_product > max_product: max_product = current_product return max_product
额外优化小技巧
如果你的输入数字特别大(比如几百上千位),可以用滑动窗口优化效率:不用每次都重新计算14个数的乘积,而是用上一个窗口的乘积除以第一个数,再乘上新的数(注意要处理0的情况,避免除以0报错),这样能省不少计算量。示例代码如下:
def optimized_max_14_digit_product(number): digits = [int(d) for d in str(number)] if len(digits) < 14: return 0 # 处理数字长度不足14位的情况 # 先计算第一个窗口的乘积 current_product = 1 for i in range(14): current_product *= digits[i] max_product = current_product # 滑动窗口遍历后续组合 for start_idx in range(1, len(digits) - 13): # 去掉前一个窗口的第一个数,乘上新的数 if digits[start_idx - 1] != 0: current_product = current_product // digits[start_idx - 1] * digits[start_idx + 13] else: # 如果前一个数是0,重新计算当前窗口的乘积 current_product = 1 for i in range(14): current_product *= digits[start_idx + i] # 更新最大值 if current_product > max_product: max_product = current_product return max_product
测试示例
拿一个常见的大数字测试:
test_num = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 print(max_14_digit_product(test_num)) # 输出结果:23514624000
内容的提问来源于stack exchange,提问作者Spike
相关产品推荐
相关产品推荐

