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

如何实现仅数字与浮点数输入校验?CPF验证代码报错求解决

CPF校验问题解决方案

问题分析

你之前的代码错误在于:

  • 修改后的代码里cpff = float和cpff = str是把变量赋值成了类型本身(比如float是Python的数值类型,不是输入值的转换结果),而非对输入内容做类型转换,所以后续调用len(cpff)会报错——因为类型对象没有长度属性。
  • 另外,CPF包含.和-符号,无法直接转成float,所以这个思路本身不成立。

正确实现思路

要实现符合要求的CPF校验,需要同时满足三个条件:

  1. 总长度为14位
  2. 格式严格匹配xxx.xxx.xxx-xx(第4、8位是.,第12位是-)
  3. 除分隔符外,其余字符均为数字

方案一:手动校验格式

required_length = 14
while True:
    cpf_input = input('Digite seu cpf aqui: ')
    
    # 检查长度
    if len(cpf_input) != required_length:
        print('CPF inválido - deve ter exatamente 14 caracteres')
        continue
    
    # 检查分隔符位置
    if cpf_input[3] != '.' or cpf_input[7] != '.' or cpf_input[11] != '-':
        print('CPF inválido - formato incorreto. Use o padrão: xxx.xxx.xxx-xx')
        continue
    
    # 提取数字部分并校验是否全为数字
    numeric_part = cpf_input.replace('.', '').replace('-', '')
    if not numeric_part.isdigit():
        print('CPF inválido - apenas números, pontos e traço são permitidos')
        continue
    
    # 校验通过,进入下一步
    find = input('O que desejas encontrar em seu cpf? ')
    break

方案二:正则表达式校验(更简洁)

利用正则表达式直接匹配符合格式的CPF:

import re

cpf_pattern = r'^\d{3}\.\d{3}\.\d{3}-\d{2}$'
while True:
    cpf_input = input('Digite seu cpf aqui: ')
    
    if re.match(cpf_pattern, cpf_input):
        find = input('O que desejas encontrar em seu cpf? ')
        break
    else:
        print('CPF inválido - use o formato correto: xxx.xxx.xxx-xx')

代码说明

  • 手动校验方案:逐步骤检查长度、分隔符位置、数字合法性,逻辑清晰,适合理解基础校验逻辑。
  • 正则方案:用^\d{3}\.\d{3}\.\d{3}-\d{2}$匹配严格格式——^和$确保整个字符串完全匹配,\d{3}表示3位数字,\.匹配实际的点(正则中点需要转义)。

内容的提问来源于stack exchange,提问作者Paovidaloka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:30:52