Python计算二进制列表0和1排列数代码运行错误求助
二进制列表排列统计代码问题修复
问题根因
- 遍历逻辑错误:你编写的
for i in x中,i已经是二进制列表的元素值(仅能为0或1),不是列表索引,后续判断中错误使用x[i]取值,本质是把元素值当成了索引使用。 - 以你给出的测试用例
1 1 0 1 1 0 1 1 0 0为例,列表第一个元素是1、第二个元素也是1,所以不管i取0还是1,x[i]的返回值永远为1,最终统计得到zero=0、one=10,代入公式计算得到10!/(0!*10!)=1,和你遇到的错误输出完全一致。
修复方案
直接判断遍历得到的元素值即可,不需要额外通过索引取值,修复后代码如下:
import math x = list(map(int, input().split())) zero = 0 one = 0 for i in x: if i == 0: zero += 1 else: one += 1 print(math.factorial(len(x)) // (math.factorial(zero) * math.factorial(one)))
结果验证
你的测试用例中0的个数为4、1的个数为6,总长度为10,正确计算结果为10!/(4!*6!)=210,修复后的代码输入对应测试用例将输出210,符合预期。
内容的提问来源于stack exchange,提问作者Athira Jayaram
相关产品推荐
相关产品推荐

