我正在尝试编写一个程序,要求用户输入名称列表并打印那些以字母A到M开头的名称。我当前的代码返回一个TypeError,并说'NoneType'不可迭代。
lst = print(input('Enter a list of names: '))
alpha = ['a,b,c,d,e,f,g,h,i,j,k,l,m,A,B,C,D,E,F,G,H,I,J,K,L,M']
for x in alpha:
if x in lst:
print(x)
由于
答案 0 :(得分:0)
首先,不需要重新创建字母表,它已经在python的string.ascii_lowercase
(documentation)中完成了
其次,如果你想要用空格分隔多个字符串,你需要使用raw_input
,然后,你需要拆分它以便得到一个可以迭代的名字列表,检查是否包含,等等。
以下是两种不同的方式:
from collections import defaultdict
from string import ascii_lowercase
lst = raw_input('Enter a list of names: ')
names = lst.split()
by_first_letter = defaultdict(list)
for name in names:
by_first_letter[name[0]].append(name)
for letter in ascii_lowercase:
if by_first_letter[letter]:
print letter, by_first_letter[letter]
另一种解决方案:
names = lst.split()
for letter in ascii_lowercase:
matches = [name for name in names if name.startswith(letter)]
if matches:
print letter, matches
更新:更简单快捷的解决方案:
from collections import defaultdict
by_first_letter = defaultdict(list)
for name in raw_input('Enter a list of names: ').split():
by_first_letter[name[0]].append(name)
for letter, names in by_first_letter.items():
print letter, names
答案 1 :(得分:0)
错误原因:
TypeError: argument of type 'NoneType' is not iterable
在您的代码的第4行,您写道:
if x in lst:
使用保留作品in
表示您要检查列表x
中是否存在lst
。 Python将为您执行此操作的方式是在列表上“迭代”(意味着逐个将其与每个项目进行比较)。说它不是“可迭代”的错误是因为它试图将lst
视为列表,但它不是一个。
我在下面做了一些修改,做了我认为你正在寻找的事情:
lst = input('Enter a list of names: ').split(" ")
alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m']
for x in lst:
if x[0].lower() in alpha:
print(x)
示例:
INPUT: Andrew Matthew Zain
OUTPUT: Andrew
Matthew
循环在每个空格分割用户输入,这意味着lst
实际上是一个列表。然后,您将使用缩写x[0]
抓住第一个字符,然后检查alpha
中是否存在该字符。