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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:35:19