打印行的最短代码以['a','b']开头,以['y','z'结尾] Python 3

时间:2017-09-29 13:02:23

标签: python python-3.x startswith ends-with

对于作业,我必须从以“W”和“Z”开头并以“n”和“t”结尾的文本中打印行(所以W-n,W-t,Z-n,Z-t组合)。我现在有一个有效的代码,但似乎有点长,我想知道是否有办法缩短它?

这是代码:

import sys

def main():

    for line in sys.stdin:
        line = line.rstrip()
        if line.startswith("W") and line.endswith("n"):
                print(line)
        if line.startswith("W") and line.endswith("t"):
                print(line)
        if line.startswith("Z") and line.endswith("n"):
                print(line)
        if line.startswith("Z") and line.endswith("t"):
                print(line)

main()

正如我所说,它有效,但似乎有点复杂。有关如何缩短的任何提示?

我尝试了line.startswith("Z","W")line.endswith("t","n"),但我得到了一个类型错误(所有切片索引必须是整数或无或者有一个__index__方法)。

5 个答案:

答案 0 :(得分:6)

你可以这样做:

line = line.rstrip()
if line and line[0] in "WZ" and line[-1] in "nt":
    print(line)

或使用正则表达式:

import re 
# ...
if re.match(r'^[WZ].*[nt]$', line):
    print(line)

# ^ beginning of string
# $ end of string
# [WX] matches W or X
# .*  any character 0 or more times

请参阅docs on Python regex syntax

答案 1 :(得分:3)

startswithendswith也接受元组作为参数(请参阅doc)。 所以这将有效:

line.startswwith(('W', 'Z'))
line.endswith(('t','n'))

您的代码可缩短为:

import sys

def main():

    for line in sys.stdin:
        line = line.rstrip()
        if line.startswith(("W", "Z")) and line.endswith(("n", "t")):
                print(line)

main()

答案 2 :(得分:0)

使用regex

import re

pattern = '[ZW].*[nt]$'

for line in sys.stdin:
    line = line.rstrip()
    mo = re.match(p, line)
    if mo:
        print(line)

模式解释:

  • [ZW]匹配两个字符中的一个;因为我们使用re.match,所以只有当字符串以模式开头时才匹配。所以它必须从Z或W
  • 开始
  • .*匹配任何内容; char,int,space等一次或多次
  • [nt]$表示匹配n或t(小写),$仅当行以结束
  • 时才匹配

答案 3 :(得分:0)

或者您可以使用正则表达式

import re

r = re.compile(r^"[WZ].+[nt]$")

m = r.match('Woot')
m.group()

答案 4 :(得分:0)

str.startswith允许你提供一个字符串元组,你必须使用一个元组(“Z”,“W”)而不是“Z”,“W”。

import sys
def main():
    for line in sys.stdin:
    line = line.rstrip()
    if line.startswith(("Z","W")) and line.endswith(("t","n")):
       print(line)
main()