Python有效整数字符串验证程序完善求助
Python有效整数字符串验证程序完善求助
我完全明白你现在卡在这个Zybooks整数验证作业里的烦恼,咱们一步步拆解问题,把你的代码改对~
首先复盘下你的问题:你现在的代码只有x25这个测试用例能输出正确结果,其他的要么判断错误,要么出现无限循环。咱们先看看你代码里的核心问题:
你的代码存在的问题
- 无限循环的根源:你只在字符不是数字的时候才让
i += 1,如果遇到数字字符,i就一直停在原地,循环条件永远满足,自然就无限循环了(比如输入78的时候,第一个字符是数字,不会进入if块,i一直是0,循环永远跑下去)。 - 没处理首字符的正负号:像
-85、+2050这种以+/-开头的合法整数,你的代码会直接判定为无效,因为首字符不是数字就把valid设为False了。 - 没考虑单独符号的情况:比如如果输入单独的
+或-,这其实是无效的,但你的代码目前没处理这种场景。
修正后的代码(只修改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 integer78:全数字 → 输出valid integerx25:首字符不是符号也不是数字 → 输出invalid integer+2050:首字符是+,后续都是数字 → 输出valid integer19-5:中间的-不是首字符 → 输出invalid integer
这样所有测试用例都能正确通过啦~
备注:内容来源于stack exchange,提问作者PS Ormenda
相关产品推荐
相关产品推荐

