gpt4 book ai didi

python - 数据验证 - 邮政编码

转载 作者:行者123 更新时间:2023-11-28 17:47:37 27 4
gpt4 key购买 nike

我遇到了以下问题:

定义一个函数 postalValidate(S) ,它首先检查 S 是否代表一个有效的邮政编码:首先,删除所有空格;余数必须是 L#L#L# 的形式,其中 L 是字母(小写或大写),# 是数字。如果 S 不是有效的邮政编码,则返回 bool 值 False。如果 S 有效,则以 L#L#L# 格式返回相同邮政编码的版本,其中每个 L 均为大写。

这是我的代码:

def postalValidate(S):
S = S.replace(" ", "")
for c in range(0, 4, 2):
if S[c].isalpha() == True:
x = True
for c2 in range(1, 5, 2):
if S[c2].isdigit() == True:
y = True
if x == True and y == True:
return S.upper()
else:
return False

问题是,我得到这个错误:

UnboundLocalError: local variable 'y' referenced before assignment

对此提供帮助将不胜感激。

最佳答案

问题是如果条件 S[c2].isdigit() == True 不满足,变量 y 就不会被赋值,所以你可以'稍后检查它是否为真。最简单的避免方法是预先给它赋值False:

y = False
for c2 in range(1, 5, 2):
if S[c2].isdigit():
y = True

一些注意事项:

  1. 您不需要在 if 子句中明确显示 == Trueif cond 检查 bool(cond) 是否为 True,在您的情况下 cond 等于 True 已经。

  2. range 函数的结果不包括它的第二个参数:

    In [1]: list(range(0, 4, 2))
    Out[1]: [0, 2]

    你可能想给它加 1:

    In [2]: list(range(0, 5, 2))
    Out[2]: [0, 2, 4]

您还可以使用切片符号来完全避免循环。

因此一些优化可以减少代码的长度:

def postValidate(s):
s = s.replace(' ', '')
if len(s) == 6 and s[0:5:2].isalpha() and s[1:6:2].isdigit():
return s.upper()
return False

关于python - 数据验证 - 邮政编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15729248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com