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

Python中while循环未输出问题排查及测试用例范围约束需求

解决Python测试用例数量范围校验的循环问题

你要限制测试用例数量在1到100000之间,输入超出范围时程序重启并提示,但代码里的while循环完全没触发,根本起不到校验作用。

问题代码的三个核心错误:

  • 逻辑判断错误:原代码用while t < 1 and t > 10^5,但一个数不可能同时满足“小于1”和“大于10^5”,应该用or表示只要满足其中一个非法条件就进入循环。
  • 运算符误用:Python中^是按位异或运算符,不是幂运算,10的5次方必须写10**5。
  • 循环内未更新输入:原循环只打印提示,没有重新获取用户输入,就算条件满足也会无限循环,必须在循环内重新读取t的值。

修正后的完整代码:

#!/bin/python3

import sys
import math
arr = []
tn = 1

# 修正后的范围校验逻辑:直到输入合法才跳出循环
while True:
    t = int(input("How many test cases do you have? ").strip())
    # 直接判断是否在合法范围内
    if 1 <= t <= 10**5:
        break
    print("请重新输入,数字不在范围内(1-100000)")

for i in range(t):
    n = int(input("What number do you want to test? ").strip())
    arr.append(n)
    
for x in range(len(arr)):
    b5 = arr[x]/5
    b3 = arr[x]/3
    # 用f-string简化字符串拼接
    print(f"Test for divisability by 3 No.{tn} {math.floor(b3)}")
    print(f"Test for divisability by 5 No.{tn} {math.floor(b5)}")
    tn += 1

修正说明:

  1. 改用while True循环结构,每次先获取输入再判断合法性,逻辑更清晰,避免原写法的条件判断陷阱。
  2. 用1 <= t <= 10**5直接判断范围,比or的写法更直观易懂。
  3. 循环内重新读取t的值,确保用户输入非法时能重新输入,直到合法为止。
  4. 额外用f-string简化了字符串拼接,代码更简洁。

内容的提问来源于stack exchange,提问作者Pascal Barthelmäs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:10:40