Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Python中空(';';)字符串方法的问题_Python_String - Fatal编程技术网

关于Python中空(';';)字符串方法的问题

关于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

当我在做关于计算机科学界的第14章的问题时,我发现了一些奇怪的事情

问题是: “定义一个函数postalValidate(S),该函数首先检查S是否表示有效的邮政编码: 首先,删除所有空格; 其余部分必须采用L#L#L#的形式,其中L是字母(小写或大写),而#是数字。 如果S不是有效的邮政编码,则返回布尔值False。如果S有效,则返回相同邮政编码的版本,格式为L#L#L#,其中每个L都是大写。“

这是我为这个问题所做的工作:

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。但他们没有,他们想检查他们是否是假的。我刚刚发现我的工作有很多逻辑错误,我将参考你的建议,尝试使用正则表达式创建新方法,谢谢。