字符串检查功能,如果其他断言

时间:2018-09-24 00:49:00

标签: python python-3.x

初学者在这里。我的代码应该能够检查给定数字的格式为xxx-xx-xxxx。我认为某处的if陈述是错误的。任何提示都欢迎您。

tsconfig.json

错误消息:

@material-ui/core

2 个答案:

答案 0 :(得分:2)

错误消息告诉您您正在尝试对类型“ int”下标。根据我要推断的内容,对(下标)您的变量“ a”进行切片,然后验证切片是否为整数(整数),在最简单的情况下,该整数可能类似于 {{1} } 。但是,该技术存在一些主要缺陷。如果无法将任何切片转换为类型“ int”,则python会抛出int(a[0:2]) + "-" + int(a[4:5]) + "-" + int(a[7:8])。您可以使用“ try”“ except”块对此进行一些改进:

ValueError: invalid literal for int() with base 10: <whatever value threw the error>

但这非常麻烦,如果您需要评估更复杂的内容,则可能会变得非常繁琐且需要很多行代码才能正确评估。

验证表达式的更简洁的方法是使用正则表达式。正则表达式非常简洁,是一种检查值,匹配格式和值类型(仅int或字符串)的统一方法。

此外,您尝试传递到checkit函数的参数值将被python误解为数学表达式。您需要用单引号或双引号将参数值引起来。

这里是检查所需格式和值类型的一种可能方法((注:此示例有些虚构,以便在断言失败时查看assert语句在运行中)):

try:
    int(a[0:2]) # etc...
except:
    print("Not the correct format")

如果您确实不需要assert语句,则这可能是验证值的更短方法:

import re
def checkit(a):
    pattern = r'^([0-9]{3})-{1}([0-9]{2})-{1}([0-9]{4})$'
    match = re.fullmatch(pattern, a)
    if match != None:
        match = match.string
    try:
        assert a == match, "Fail"
        print("True")
        print("\n(Good job!)")
    except:
        assert a == match, "Fail"
        print("False")
        print("Not the correct format or values or both")

要了解更多信息并更好地了解正则表达式,请点击以下有关regexp的链接

PyRegex

对本网站也可能会有帮助

通过这种方式,可以按照与示例中使用的方法相近的方式来解析和验证字符串,您可以执行以下操作:

import re
def checkit(a):
    pattern = r'^([0-9]{3})-{1}([0-9]{2})-{1}([0-9]{4})$'
    match = re.fullmatch(pattern, a)
    if match != None:
        print("True")
        print("\n(Good job!)")
    else:
        print("False")
        print("Not the correct format or values or both")

答案 1 :(得分:0)

尝试使用正则表达式:

import re
def checkit(a):
    return bool(re.match("^[0-9]{3}-[0-9]{2}-[0-9]{4}$", a))

checkit("832-38-1847")
#> True
checkit("832- 23-  1 847")
#> False

reprexpy package

创建于2018-09-23
import reprexpy
print(reprexpy.SessionInfo())
#> Session info --------------------------------------------------------------------
#> Platform: Darwin-17.7.0-x86_64-i386-64bit (64-bit)
#> Python: 3.6
#> Date: 2018-09-23
#> Packages ------------------------------------------------------------------------
#> reprexpy==0.1.1