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

编程新手求助:生成0-9999符合特定规则的数字序列

解决0-9999有效数字生成问题

作为编程新手遇到这种带规则的筛选问题很正常,咱们一步步拆解来搞定它,逻辑捋顺了其实不难。

先拆解核心判断规则

首先把你的需求拆成两个可落地的小条件:

  • 条件1:数字的每一位都不能是4或者8
  • 条件2:把数字的各位相加,重复这个过程直到得到一个个位数(比如2356→16→7),这个最终结果也不能是4或者8

实现两个基础判断函数

先写两个小函数分别验证这两个条件,逻辑拆分后新手也能轻松理解:

1. 判断数字本身是否符合要求

把数字转成字符串,直接检查有没有'4'或'8'字符就行,简单直观:

def has_no_4_or_8(num):
    num_str = str(num)
    return '4' not in num_str and '8' not in num_str

2. 判断各位和的最终结果是否符合要求

这里需要循环计算各位和,直到结果变成个位数,再检查这个数是不是4或8:

def get_final_digit_sum(num):
    # 循环求和直到结果是个位数
    while num >= 10:
        num = sum(int(digit) for digit in str(num))
    return num

def final_sum_is_valid(num):
    final_sum = get_final_digit_sum(num)
    return final_sum not in (4, 8)

遍历筛选所有有效数字

现在只需要遍历0到9999的所有数字,同时满足两个条件的就是我们要的有效数字:

valid_numbers = []
for num in range(10000):
    if has_no_4_or_8(num) and final_sum_is_valid(num):
        valid_numbers.append(num)

# 打印前20个结果看看是否符合预期
print("前20个有效数字:", valid_numbers[:20])

小优化:减少不必要的遍历

其实我们可以不用遍历全部10000个数,因为条件1已经限制了每一位只能是0、1、2、3、5、6、7、9(共8种选择),直接生成符合条件1的数再检查条件2,效率会更高:

valid_numbers = []
# 遍历四位的每一位(千、百、十、个)
allowed_digits = [0,1,2,3,5,6,7,9]
for thousands in allowed_digits:
    for hundreds in allowed_digits:
        for tens in allowed_digits:
            for units in allowed_digits:
                num = thousands * 1000 + hundreds * 100 + tens * 10 + units
                if final_sum_is_valid(num):
                    valid_numbers.append(num)

print("有效数字总数:", len(valid_numbers))

验证示例数字

拿你提到的2356测试一下:

print(has_no_4_or_8(2356))       # 输出True,符合条件1
print(final_sum_is_valid(2356))  # 输出True,符合条件2

完全符合要求,说明逻辑是对的。

如果有哪段代码或者逻辑没搞懂,随时问细节就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:01:05