
本教程详解如何在不修改原有框架的前提下,编写逻辑严谨的字符遍历代码,判断输入字符串是否为合法整数——允许首字符为 '+'、'−' 或数字,其余字符必须全为数字。
本教程详解如何在不修改原有框架的前提下,编写逻辑严谨的字符遍历代码,判断输入字符串是否为合法整数——允许首字符为 '+'、'−' 或数字,其余字符必须全为数字。
在初学字符串处理与条件逻辑时,一个常见误区是将“所有字符都需满足同一规则”与“首字符特殊、其余统一”的分层校验混为一谈。题目明确要求:合法整数字符串最多含一个前置符号(+ 或 -),且仅能出现在索引 0 的位置;其余所有字符(如有)必须严格为十进制数字。原始代码已固定使用 while 循环 + i 索引遍历,因此我们只需在循环体内精准实现该双层判断逻辑。
关键在于区分索引位置:
- 当
i == 0(首字符)时,允许string[i]是数字、'+'或'-'; - 当
i > 0(后续字符)时,只允许数字,任何非数字字符(包括符号、字母、空格等)均导致valid = False。
同时必须注意:无论是否触发校验失败,i 都必须递增,否则循环无法推进,将陷入无限循环(这正是你遇到 x25 通过但其他用例失败或卡死的根本原因)。原错误代码中 i += 1 仅在 if not ... 分支内执行,一旦首字符合法(如 '7' 或 '+'),i 就不再更新,导致 while 条件恒真。
以下是符合要求的完整实现(严格遵循不可修改已有代码行的原则):
string = input() valid = True i = 0 while valid and i <p><strong>测试用例解析</strong>:</p>
-
-85→ 首字符'-'合法,'8'、'5'均为数字 → ✅ -
78→ 首字符'7'是数字,'8'是数字 → ✅ -
x25→ 首字符'x'非数字也非符号 → ❌ -
+2050→ 首字符'+'合法,后续全数字 → ✅ -
19-5→ 第三位'-'出现在非首位置 → ❌
注意事项:
- 不要遗漏
i += 1,它是跳出循环的生命线; -
string[i].isdigit()可安全处理单个字符,但注意它对'+'/'-'返回False,因此首字符需显式用in ['+','-']判断; - 空字符串
""会被自然捕获:len(string) == 0,循环不执行,valid保持True—— 但根据整数定义,空串应视为非法。若需严格合规,应在循环前补充if len(string) == 0: valid = False;不过本题测试用例未包含空串,ZyBooks 默认接受当前逻辑。
掌握这种“位置敏感型字符校验”是字符串解析的基础能力,建议后续拓展练习:支持带空格的整数(如 " +123 ")、识别科学计数法,或改用正则表达式 r'^[+-]?\d+$' 实现等价功能。










