Python迭代程序:在列表中打印以特定字符开头的字符串

时间:2015-10-10 03:38:53

标签: python string list iteration

在我开始提问之前,我想说我是一名初学者,在我的学校学习python课程,所以如果我的问题措辞不当,我很抱歉,欢迎提出建议。

我正在努力解决的问题是:“创建一个程序,要求用户输入名称列表,并打印以A到I开头的名称。”

到目前为止,这是我的代码,我没弄错,弄清楚我做错了什么:

students = input('Enter a list of students: ')
for s in students:
    if students[:1] == 'abcdefghiABCDEFGHI':
        print(s)

任何答案都将不胜感激,谢谢您的提前时间。

2 个答案:

答案 0 :(得分:1)

您的问题似乎在这里:

if students[:1] == 'abcdefghiABCDEFGHI':

此检查始终为false。要使str1 == str2为真,则字符串必须具有相同的长度,并且具有相同顺序的所有相同字符。但students[:-1]将为零或一个字符长,因此它不能等于右边更长的字符串。要检查该字符是 长字符串中的那些,您可以使用in运算符:

if students[:1] in 'abcdefghiABCDEFGHI':

但请注意,如果students为空字符串'',则可能不是您想要的。您可以使用students[0]来防范(空字符串将导致错误而不是误报),但更好的方法是使用str.startswith方法,如下所示:

if students.startswith(tuple('abcdefghiABCDEFGHI')):

tuple调用是将字符串转换为元组('a', 'b', 'c', ...) - 您可以选择将该元组文字直接放在代码中。你需要将参数作为一个元组,因为startswith(如==)检查任意长度的字符串 - 但是将一个可能的前缀元组分别检查所有这些字符串,如果它们中的任何一个匹配则为真

此外,执行不区分大小写检查的更常见方法是将测试字符串强制插入所需的大小写;当你必须测试超过一个字符的字符串时,这是一个很有用的技巧 - 它的工作原理如下:

if students.upper().startswith(tuple("ABCDEFGHI")):

答案 1 :(得分:0)

def test(students=['Ferris','Douglas','Zarah','Jacob','Hamilton','Iris'], reg=r'[A-I][a-z]+'):
    import re
    for student in students:
        s = re.findall(reg, student)
        if s:
            print s[0]
test()