为何我的if语句无法正确比较字符串?电话号码验证异常排查
问题:电话号码前3位范围验证不生效的解决办法
核心问题出在字符串数值范围的比较逻辑错误,具体问题和修正方案如下:
问题分析
- 你当前的判断条件
'200' > numnums[0] > '999'逻辑完全不成立——一个字符串不可能同时小于'200'且大于'999',这直接导致该条件永远不会触发。 - 即使逻辑方向正确,字符串的字典序比较也存在隐患(比如
'127'和'200'的字符串比较能正常工作,但如果出现非3位的异常值,字典序会和数值序结果不一致)。
修正后的代码
number = '' while number.lower() != 'q': number = input('Enter phone number or q to quit: ') numnums = number.split('-') if number.lower() == 'q': break elif number.count('-') != 2: print('Phone number should have 2 dashes.') elif not numnums[0].isdigit() or len(numnums[0]) != 3: print('First part of phone number must be a 3-digit number.') elif not numnums[1].isdigit() or len(numnums[1]) != 3: print('Second part of phone number must be a 3-digit number.') elif not numnums[2].isdigit() or len(numnums[2]) != 4: print('Last part of phone number must be a 4-digit number.') elif int(numnums[0]) < 200 or int(numnums[0]) > 999: print('First 3 digits must be between 200 and 999') else: number = number.replace('-', '.') print(f'Phone number with dashes replaced: {number}')
关键修正点
- 将
numnums[0]转换为整数int(numnums[0]),用数值比较替代字符串比较,彻底避免字典序的误导。 - 调整判断条件为
int(numnums[0]) < 200 or int(numnums[0]) > 999,准确捕获前3位不在200-999范围内的无效情况。
内容的提问来源于stack exchange,提问作者Code_monkey
相关产品推荐
相关产品推荐

