在while循环中实现持续提示合法用户输入的问题排查
问题分析与修复方案
原代码的核心问题
- 输入负数时,
input()的返回值没有赋值给num,导致num仍为初始的负数,后续流程逻辑混乱。 - 错误使用了
while...else结构:while的else分支仅在循环条件不成立且未被break终止时执行,这里用来处理非法输入完全不符合逻辑,会导致仅提示一次就结束程序。
修复后的代码(纯while循环实现)
# 持续获取合法的非负整数输入 while True: try: num = int(input("请输入一个非负整数:")) if num >= 0: break else: print("仅允许输入非负整数,请重新输入!") except ValueError: print("输入不是整数,请重新输入!") # 用while循环计算阶乘 if num == 0: print("0的阶乘是1") else: factor = 1 while num > 1: factor *= num num -= 1 print(f"阶乘结果是:{factor}")
代码说明
- 输入校验循环:用
while True构建无限循环,直到用户输入合法的非负整数才通过break跳出。加入try-except处理非整数输入的情况,覆盖所有非法输入场景。 - 阶乘计算逻辑:单独处理0的阶乘(固定为1),正整数则用
while循环逐步累乘,直到num递减到1为止。
内容的提问来源于stack exchange,提问作者HuntSwood17
相关产品推荐
相关产品推荐

