Python 迭代程序:打印列表中以特定字符开头的字符串
Python iteration program: print strings in a list that start with a specific character
在开始我的问题之前,我想说我是一名初学者,正在学校介绍 python 课程,如果我的问题措辞不当,我深表歉意,建议如下欢迎。
我正在纠结的问题是这样的:"Create a program that requests a list of names from the user and print the names starting with A through I."
到目前为止,这是我的代码,我还没有弄清楚我做错了什么:
students = input('Enter a list of students: ')
for s in students:
if students[:1] == 'abcdefghiABCDEFGHI':
print(s)
任何答案将不胜感激,感谢您提前抽出时间。
mylist = []
check = "a,b,c,d,e,f,g,h,i,A,B,C,D,E,F,G,H,I"
while True:
students = input("Enter list of students: ")
if students == "end":
break
mylist.append(students)
for x in mylist:
if x[0] in check:
print (x)
输出;
>>>
Enter list of students: Jack
Enter list of students: Annie
Enter list of students: Foo
Enter list of students: Yo
Enter list of students: Ilsa
Enter list of students: gubar
Enter list of students: Ceren
Enter list of students: end
Annie
Foo
Ilsa
gubar
Ceren
>>>
我曾经 "end" 打破循环,这样我就可以将学生姓名附加到列表中,完成后,我只写了 "end".
x[0]
将检查学生姓名的第一个字母。如果它在我们的 'check' 列表中,它是由我们想要的字母组成的,它将打印出来。
为了更清楚,请查看此示例;
mylist = []
check = "a,b,c,d,e,f,g,h,i,A,B,C,D,E,F,G,H,I"
while True:
students = input("Enter list of students: ")
if students == "end":
break
mylist.append(students)
print ("The name list of students: {}".format(mylist))
for x in mylist:
if x[0] in check:
print ("{} starts with {}, so printed.".format(x,x[0]))
>>>
Enter list of students: Jack
Enter list of students: zed
Enter list of students: Ilsa
Enter list of students: Annie
Enter list of students: foo
Enter list of students: ceren
Enter list of students: tom
Enter list of students: end
The name list of students: ['Jack', 'zed', 'Ilsa', 'Annie', 'foo', 'ceren', 'tom']
Ilsa starts with I, so printed.
Annie starts with A, so printed.
foo starts with f, so printed.
ceren starts with c, so printed.
>>>
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()
您的问题似乎出在这里:
if students[:1] == 'abcdefghiABCDEFGHI':
这个检查永远是错误的。要使 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")):
在开始我的问题之前,我想说我是一名初学者,正在学校介绍 python 课程,如果我的问题措辞不当,我深表歉意,建议如下欢迎。
我正在纠结的问题是这样的:"Create a program that requests a list of names from the user and print the names starting with A through I."
到目前为止,这是我的代码,我还没有弄清楚我做错了什么:
students = input('Enter a list of students: ')
for s in students:
if students[:1] == 'abcdefghiABCDEFGHI':
print(s)
任何答案将不胜感激,感谢您提前抽出时间。
mylist = []
check = "a,b,c,d,e,f,g,h,i,A,B,C,D,E,F,G,H,I"
while True:
students = input("Enter list of students: ")
if students == "end":
break
mylist.append(students)
for x in mylist:
if x[0] in check:
print (x)
输出;
>>>
Enter list of students: Jack
Enter list of students: Annie
Enter list of students: Foo
Enter list of students: Yo
Enter list of students: Ilsa
Enter list of students: gubar
Enter list of students: Ceren
Enter list of students: end
Annie
Foo
Ilsa
gubar
Ceren
>>>
我曾经 "end" 打破循环,这样我就可以将学生姓名附加到列表中,完成后,我只写了 "end".
x[0]
将检查学生姓名的第一个字母。如果它在我们的 'check' 列表中,它是由我们想要的字母组成的,它将打印出来。
为了更清楚,请查看此示例;
mylist = []
check = "a,b,c,d,e,f,g,h,i,A,B,C,D,E,F,G,H,I"
while True:
students = input("Enter list of students: ")
if students == "end":
break
mylist.append(students)
print ("The name list of students: {}".format(mylist))
for x in mylist:
if x[0] in check:
print ("{} starts with {}, so printed.".format(x,x[0]))
>>>
Enter list of students: Jack
Enter list of students: zed
Enter list of students: Ilsa
Enter list of students: Annie
Enter list of students: foo
Enter list of students: ceren
Enter list of students: tom
Enter list of students: end
The name list of students: ['Jack', 'zed', 'Ilsa', 'Annie', 'foo', 'ceren', 'tom']
Ilsa starts with I, so printed.
Annie starts with A, so printed.
foo starts with f, so printed.
ceren starts with c, so printed.
>>>
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()
您的问题似乎出在这里:
if students[:1] == 'abcdefghiABCDEFGHI':
这个检查永远是错误的。要使 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")):