You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Project Euler第32题:简化Python代码中冗长的多条件if语句

优化Project Euler第32题的数字检查逻辑

你这段代码能跑对结果已经很棒了!针对那个冗长的if判断,这里给你几个不用大改代码的简洁替换方案:

方案1:利用集合特性简化判断

因为你已经确保了xxx的长度是9,只要它的字符集合刚好覆盖1-9且无重复,就符合 pandigital 数的要求。把原来的长判断换成:

if set(xxx) == set('123456789'):

或者更简洁的写法(长度固定为9时,集合长度等于9就意味着没有重复且刚好包含1-9所有数字):

if len(set(xxx)) == 9:

方案2:用all()函数合并多条件

如果不想用集合,也可以用all()遍历检查每个数字是否存在,写法更紧凑:

if all(digit in xxx for digit in '123456789'):

另外提两个小细节(不影响功能但更规范):

  • 别用list当变量名,这是Python的内置类型,换成products这类自定义名称更安全
  • 去重的循环可以直接用集合简化:new_list = list(set(products)),求和的话甚至不用转列表,直接sum(set(products))就行,省掉那一段循环

修改后的完整代码示例(仅替换判断部分+优化变量名和去重):

products = []

# Create list of 9 digit pandigital numbers
for a in range(1, 100):
    for b in range(100, 10000):
        c = a * b
        num = len(str(c)) + len(str(a)) + len(str(b))
        if num == 9:
            xxx = str(c) + str(b) + str(a)
            # 这里用集合判断
            if len(set(xxx)) == 9:
                products.append(c)  # 直接存c,不用转字符串再转int

# 直接用集合去重并求和
print(sum(set(products)))

内容的提问来源于stack exchange,提问作者Peter4075

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:32:42