如何修复Python循环统计合法输入时非法输入导致计数缺失问题
问题原因
你代码的核心问题是range(1, loopcount)在循环开始前就已经生成了固定的10次迭代序列(初始loopcount=11,range遵循左闭右开规则,最终生成1到10共10个值),后续修改loopcount的值不会改变已经生成的迭代序列。遇到非法输入时执行continue只会跳过当次循环,不会补充新的循环次数,最终有效输入的数量就会少于10次,也就是你遇到的有效输出缺失问题。
修复方案
把固定次数的for循环改成while循环,通过有效计数控制循环终止条件,只有输入合法时才累计计数,直到凑够10次有效输入为止,修复后代码如下:
num_pass = 0 num_fail = 0 # 有效输入计数,初始为0 valid_count = 0 # 目标有效输入数量为10 target = 10 while valid_count < target: grade = int(input('1 for pass 2 for fail: ')) if grade == 1: num_pass += 1 valid_count += 1 elif grade == 2: num_fail += 1 valid_count += 1 else: # 非法输入直接进入下一轮循环,不消耗计数名额 print('输入不合法,请重新输入1或2') continue print('Passes:', num_pass) print('Failed:', num_fail)
修复逻辑说明
- 去掉预生成固定迭代次数的for循环,改用while循环动态判断有效输入数量是否达标
- 新增
valid_count变量统计合法输入的次数,仅输入为1或2时才累计该变量 - 非法输入时仅提示后进入下一轮循环,不会消耗有效计数名额,保证最终能收集到恰好10次有效结果

内容的提问来源于stack exchange,提问作者Tuna K
相关产品推荐
相关产品推荐

