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

嵌套循环作业求助:四位数无偶数位筛选程序输出异常

问题排查:寻找两数间不含偶数数字的四位数

我有一项嵌套循环的编程作业,需要写Python程序读取两个四位数整数,输出两者之间所有不含偶数数字的数。但代码运行结果和预期不符,附上相关内容求排查:

first_num = int(input())
second_num = int(input())
count = 0

for i in range(1, 11):
    for j in range(1, 11):
        for k in range(1, 11):
            for l in range(1, 11):
                count += 1
                if first_num <= count <= second_num:
                    if i % 2 != 0 and j % 2 != 0 and k != 2 != 0 and l % 2 != 0:
                        print(f"{i}{j}{k}{l}", end=" ")

示例输入:

3256 6579

预期输出:

3357 3359 3377 3379 3557 3559 3577 3579 5357 5359 5377 5379 5557 5559 5577 5579

实际输出(部分):

5111 5113 5115 5117 5119 5131 5133 5135 5137 5139 5141 5143 5145 5147 5149 5151 5153 5155 5157 5159 5161 5163 5165 5167 5169 5171 5173 5175 5177 5179 5181 5183....75109

问题分析与修正

核心错误点

  1. count变量逻辑完全错误
    你用count累加循环次数来判断是否在输入区间内,但count的值和生成的四位数(比如1111)完全不对应。比如第一次循环生成1111时count是1,远小于输入的3256,导致符合数字要求但不在区间的数被跳过,同时区间内的数也因为count和实际数值不匹配而判断错误。

  2. k的判断条件写错
    k != 2 != 0这个表达式逻辑错误,它并不能判断k是奇数,会允许4、6、8这类偶数通过,这就是实际输出出现5141(十位是4)的原因。正确写法应该和其他位一致:k % 2 != 0。

  3. 循环范围错误
    range(1,11)会包含10,而四位数的每一位只能是0-9,千位如果取10会生成五位数(比如10111),完全不符合要求。而且我们只需要奇数数字,直接遍历奇数即可,无需遍历1-10再做判断。

修正后的代码

写法一(嵌套循环优化)

first_num = int(input())
second_num = int(input())

# 只遍历奇数数字组成的四位数
for i in range(1, 10, 2):  # 千位:1、3、5、7、9
    for j in range(1, 10, 2):  # 百位:1、3、5、7、9
        for k in range(1, 10, 2):  # 十位:1、3、5、7、9
            for l in range(1, 10, 2):  # 个位:1、3、5、7、9
                current_num = i * 1000 + j * 100 + k * 10 + l
                if first_num <= current_num <= second_num:
                    print(current_num, end=" ")

写法二(更简洁直观)

直接遍历输入区间内的所有数,逐个检查每一位是否为奇数:

first_num, second_num = map(int, input().split())

result = []
for num in range(first_num, second_num + 1):
    all_odd = True
    for digit in str(num):
        if int(digit) % 2 == 0:
            all_odd = False
            break
    if all_odd:
        result.append(str(num))

print(" ".join(result))

修正说明

  • 写法一通过限定循环范围直接生成符合数字要求的四位数,再判断是否在输入区间,逻辑清晰且高效。
  • 写法二更易读,直接遍历区间内的数,逐位检查是否全为奇数,适合初学者理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:45:41