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

为何我的if语句无法正确比较字符串?电话号码验证异常排查

问题:电话号码前3位范围验证不生效的解决办法

核心问题出在字符串数值范围的比较逻辑错误,具体问题和修正方案如下:

问题分析

  1. 你当前的判断条件'200' > numnums[0] > '999'逻辑完全不成立——一个字符串不可能同时小于'200'且大于'999',这直接导致该条件永远不会触发。
  2. 即使逻辑方向正确,字符串的字典序比较也存在隐患(比如'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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:15:19