关于Python中空(';';)字符串方法的问题
当我在做关于计算机科学界的第14章的问题时,我发现了一些奇怪的事情 问题是: “定义一个函数postalValidate(S),该函数首先检查S是否表示有效的邮政编码: 首先,删除所有空格; 其余部分必须采用L#L#L#的形式,其中L是字母(小写或大写),而#是数字。 如果S不是有效的邮政编码,则返回布尔值False。如果S有效,则返回相同邮政编码的版本,格式为L#L#L#,其中每个L都是大写。“ 这是我为这个问题所做的工作:关于Python中空(';';)字符串方法的问题,python,string,Python,String,当我在做关于计算机科学界的第14章的问题时,我发现了一些奇怪的事情 问题是: “定义一个函数postalValidate(S),该函数首先检查S是否表示有效的邮政编码: 首先,删除所有空格; 其余部分必须采用L#L#L#的形式,其中L是字母(小写或大写),而#是数字。 如果S不是有效的邮政编码,则返回布尔值False。如果S有效,则返回相同邮政编码的版本,格式为L#L#L#,其中每个L都是大写。“ 这是我为这个问题所做的工作: def postalValidate(S): if S.cou
def postalValidate(S):
if S.count(' ') > 0:
S.replace(' ', '')
if S.isalpha() or S.isdigit() == True:
return False
else:
if S[0].isalpha() and S[2].isalpha() and S[4].isalpha() == False:
return False
else:
if S[1].isdigit() and S[3].isdigit() and S[5].isdigit() == False:
return False
else:
return S.upper()
除此后验证('d3 L3 T3')外,所有输入均正确。
我使用S.count来标识输入中有多少个“”,但它不起作用。相反,输入在进入函数后立即变成“d3L3T3”
是否有正确的方法计算“”字符串?
或者是否有其他方法来删除字符串中的“”,而不是使用字符串方法?如注释中所述,如果您有多个条件,则需要检查所有条件:
if S[0].isalpha() and S[2].isalpha() and S[4].isalpha() == False:
...
这不是你想要的。你需要这样写:
if S[0].isalpha() == True and S[2].isalpha() == True and S[4].isalpha() == False:
...
作为另一个选项,您可以使用正则表达式匹配:
import re
def postalValidate(S):
S = S.replace(' ', '')
pattern = re.compile('^([a-zA-Z][0-9]){3}$')
if pattern.match(S):
return S.upper()
else:
return False
if __name__ == '__main__':
print(postalValidate('l3D1 z1 '))
print(postalValidate('11z'))
print(postalValidate('a1b2c3 '))
print(postalValidate('3 l D1 z1 '))
print(postalValidate('3 l D1 z1 b2 '))
print(postalValidate(''))
print(postalValidate(' '))
print(postalValidate(' L3 z0 V1 '))
此变量更灵活,更容易更改。您不需要检查是否有空格,只需进行替换,但重新分配给
S
,S=S.replace(“”,)
;字符串是不可变的,并且str.replace
不在适当位置。如果S[0]。isalpha()和S[2]。isalpha()和S[4]。isalpha()==False:用于检查所有这些条件是否都为False?目前它相当于如果s[0]。isalpha()==True和s[2]。isalpha()==True和s[4]。isalpha()==False:
,我想你不会这么认为intended@Chris_Rands谢谢,它成功了。@roganjosh是的,我想检查所有这些条件,看看输入是否符合“L#L#L#形式。然后你需要明确,Python无法以英语表达的方式理解它<代码>如果不是S[0]。isalpha()而不是S[2]。isalpha()而不是S[4]。isalpha():。对于更长的条件列表,您可能需要使用any()
或all()
。但目前,它并没有做你认为它在做的事情。我甚至不确定您是否应该使用和,而是使用或。这两个if
语句是相同的(if S[0]。isalpha()
和if S[0]。isalpha()==True
是相同的东西)。事实上,如果OP希望检查这些条件是否为真,那么它们的初始代码更像Python。但他们没有,他们想检查他们是否是假的。我刚刚发现我的工作有很多逻辑错误,我将参考你的建议,尝试使用正则表达式创建新方法,谢谢。