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

2024-05-19 10:52:40 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在做关于计算机科学界的第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”。你知道吗

有没有正确的方法来计算“”字符串?或者是否有其他方法来删除字符串中的“”,而不是使用字符串方法?


Tags: and方法函数字符串falsereturnifcount
1条回答
网友
1楼 · 发布于 2024-05-19 10:52:40

正如评论中提到的,如果您有几个条件,那么您需要检查所有这些条件:

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 '))

这种变体更灵活,更容易更改。你知道吗

相关问题 更多 >

    热门问题