Python网格输入有效性循环校验逻辑错误求助
解决网格每行输入的全元素有效性校验问题
问题根源
你的代码仅校验了每行对应行号索引的单个元素(比如第1行只查第1个元素),完全没覆盖所有列的元素,同时还缺少两个关键校验:输入的数字数量是否匹配列数、非数字输入的处理,且原判断范围(>0且≤20)和需求的0-20不符。
修正后的完整代码
# 先获取网格维度(修正了原代码的拼写错误) totLines = int(input("请输入行数:")) totColumns = int(input("请输入列数:")) for lin in range(1, totLines + 1): print(f"第 {lin} 行") while True: sMoves = input("请输入该行的数字(用空格分隔):") listMoves = sMoves.split() # 1. 检查输入的数字数量是否等于设定的列数 if len(listMoves) != totColumns: print(f"输入无效:每行必须恰好输入 {totColumns} 个数字") continue # 2. 尝试将所有输入转为整数,处理非数字输入 try: listMovesINT = list(map(int, listMoves)) except ValueError: print("输入无效:所有内容必须是整数") continue # 3. 遍历检查每个数字是否在0到20之间(包含边界) all_valid = True for num in listMovesINT: if not (0 <= num <= 20): all_valid = False break if all_valid: print("输入有效,继续下一行...") break else: print("输入无效:所有数字必须在0到20之间(包含0和20)")
关键修改说明
- 修正了原代码的拼写错误(
os→of、Colunms→Columns,并把提示改成中文更友好) - 新增列数匹配校验:确保用户输入的数字个数和之前设定的列数一致,避免行数列数不匹配的问题
- 新增非数字容错:用
try-except捕获输入非整数的情况,避免程序崩溃 - 替换单一元素校验为全元素遍历检查:确保每行的每一个数字都符合0-20的范围要求
- 严格遵循需求的范围判断:把原有的
>0改为包含0的边界判断
内容的提问来源于stack exchange,提问作者Did
相关产品推荐
相关产品推荐

