我遇到使用输入字符串并检查它是否是数据列表中元组的一部分的问题。
data = [(Mr. John Doe, 345.678.9765, johndoe@gmail.com),
(Ms. Mary Doe, 345.123.4567, marydoe@gmail.com)]
print("Search for: ")
s = input()
while s:
for a in data:
if any(b[0] == s for b in a):
print(a)
else:
print("Not Found")
print("Search for: ")
s = input()
如果我输入Mr.
作为输入,它将无法在元组中找到组件,但如果我输入j
作为输入,它将打印出来:
(Mr. John Doe, 345.678.9765, johndoe@gmail.com)
答案 0 :(得分:1)
any(b[0] == s for b in a)
将仅为True
(例如Mr. John Doe
)。相反,使用in
运算符检查用户输入是否 名称字符串的任何部分:
data = [('Mr. John Doe', '345.678.9765', 'johndoe@gmail.com'),
('Ms. Mary Doe', '345.123.4567', 'marydoe@gmail.com')]
print("Search for: ")
s = input()
result = None # set a variable to hold our result
for a in data:
if any(s in b for b in a): # use in to check if substring 's' is in string 'b'
result = a[0] # save the name that contains user input
break # exit loop if found
else:
result = "Not Found"
print(result)
Mr.
输入失败的原因是b[0]
中的b[0] == s for b in a
引用元组中每个字符串中的第一个字母,而3个字符的字符串永远不会等于单个字符。
同样,当我们输入j
时,比较b[0] == s for b in a
匹配第一个元组的最后一个字符串中的第一个字符(j
johndoe@gmail.com
1}}),所以它做了输出那个元组。
希望这有帮助。