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

Python有效整数字符串验证程序完善求助

Python有效整数字符串验证程序完善求助

我完全明白你现在卡在这个Zybooks整数验证作业里的烦恼,咱们一步步拆解问题,把你的代码改对~

首先复盘下你的问题:你现在的代码只有x25这个测试用例能输出正确结果,其他的要么判断错误,要么出现无限循环。咱们先看看你代码里的核心问题:

你的代码存在的问题

  1. 无限循环的根源:你只在字符不是数字的时候才让i += 1,如果遇到数字字符,i就一直停在原地,循环条件永远满足,自然就无限循环了(比如输入78的时候,第一个字符是数字,不会进入if块,i一直是0,循环永远跑下去)。
  2. 没处理首字符的正负号:像-85、+2050这种以+/-开头的合法整数,你的代码会直接判定为无效,因为首字符不是数字就把valid设为False了。
  3. 没考虑单独符号的情况:比如如果输入单独的+或-,这其实是无效的,但你的代码目前没处理这种场景。

修正后的代码(只修改while循环内的部分)

你不需要改动原有代码框架,只需要把while循环里的代码替换成下面这段:

string = input()
valid = True
i = 0

while valid and i < len(string) :
    # To be valid, the string can only contain digits 
    # and a sign character (+ or -) as the first character.
    # 处理首字符的特殊规则
    if i == 0:
        # 首字符可以是+、-或者数字
        if string[i] in '+-':
            # 如果只有符号没有后续数字,标记为无效
            if len(string) == 1:
                valid = False
        elif not string[i].isdigit():
            # 首字符既不是符号也不是数字,直接无效
            valid = False
    else:
        # 非首字符必须是数字,否则无效
        if not string[i].isdigit():
            valid = False
    # 关键:不管当前字符是否合法,都要让i递增,避免无限循环
    i += 1

if valid :
    print("valid integer")
else :
    print("invalid integer")

代码解释

  • 解决无限循环:每次循环结束都执行i += 1,确保i会逐步增加,直到超出字符串长度,循环正常终止。
  • 首字符处理:单独判断i == 0的情况,允许+/-作为首字符,但同时检查如果只有符号没有后续数字的情况(比如输入+),这种会被标记为无效。
  • 非首字符严格校验:除了首字符,其他位置必须是数字,否则直接标记为无效。

现在用你的五个测试用例验证:

  • -85:首字符是-,后续都是数字 → 输出valid integer
  • 78:全数字 → 输出valid integer
  • x25:首字符不是符号也不是数字 → 输出invalid integer
  • +2050:首字符是+,后续都是数字 → 输出valid integer
  • 19-5:中间的-不是首字符 → 输出invalid integer

这样所有测试用例都能正确通过啦~

备注:内容来源于stack exchange,提问作者PS Ormenda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:08:09