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
修正说明:
- 改用
while True循环结构,每次先获取输入再判断合法性,逻辑更清晰,避免原写法的条件判断陷阱。 - 用
1 <= t <= 10**5直接判断范围,比or的写法更直观易懂。 - 循环内重新读取
t的值,确保用户输入非法时能重新输入,直到合法为止。 - 额外用f-string简化了字符串拼接,代码更简洁。
内容的提问来源于stack exchange,提问作者Pascal Barthelmäs
相关产品推荐
相关产品推荐

