Python中的名称搜索
在这个程序中,用户应该输入一个男孩的名字和一个女孩的名字。然后,程序应该输出这两个名称是否在文件中。我的程序从现在开始运行,但无论我输入什么名称,它都会输出该名称不在列表中。我需要做什么来解决这个问题Python中的名称搜索,python,Python,在这个程序中,用户应该输入一个男孩的名字和一个女孩的名字。然后,程序应该输出这两个名称是否在文件中。我的程序从现在开始运行,但无论我输入什么名称,它都会输出该名称不在列表中。我需要做什么来解决这个问题 foundGirl = False findGirl = input("What is the girl's name?: ") girlNames = open('GirlNames.txt', 'r') searchGirls = girlNames.readline() if search
foundGirl = False
findGirl = input("What is the girl's name?: ")
girlNames = open('GirlNames.txt', 'r')
searchGirls = girlNames.readline()
if searchGirls == findGirl:
print(findGirl, 'is found in the top 200 baby names.')
print()
foundGirl = True
searchGirls = girlNames.readline()
if not foundGirl:
print('That girl name was not on the list.')
foundBoy = False
findBoy = input("What is the boy's name?: ")
boyNames = open('BoyNames.txt', 'r')
searchBoys = boyNames.readline()
if searchBoys == findBoy:
print(findBoy, 'is found in the top 200 baby names.')
print()
foundBoy = True
searchBoys = boyNames.readlines()
if not foundBoy:
print('That boy name was not on the list.')
girlNames.close()
boyNames.close()
假设您的所有姓名都列在文件中,并由回车符分隔,则您必须使用
readline()
创建一个循环来遍历所有行,或者使用readlines()
将所有行放入一个数组中
我建议第二种解决办法:
girlNames = open('GirlNames.txt', 'r')
searchGirls = girlNames.readlines()
readlines
将为文本文件中的所有行保留尾随的\n
,因此您需要为刚刚添加到数组中的所有名称除去尾随的:
searchGirls = [s.strip() for s in searchGirls]
然后只需检查数组中是否包含字符串:
if findGirl in searchGirls:
假设每个文本文件的结构都是每个名称位于一行上,我看到两个潜在的问题可能会自行发生,或者两者同时发生:
第一个问题是,由于file.readline
在每行末尾返回一个\n
(换行符)字符,因此它与用户输入不完全匹配
我看到的第二个问题是,你根本没有读足够的文字。你最多只能读两个名字。如果目标名称在第三行或第四行怎么办?您需要在每一行上循环,测试它是否匹配用户输入
以下是我将如何重新编写您的代码:
girl_name = input() # prompt left out for brevity
boy_name = input() # prompt left out for brevity
with open('BoyNames.txt', 'r') as boy_names, open('GirlNames.txt', 'r') as girl_names:
if any(name.strip() == boy_name for name in boy_names):
print(boy_name, 'was found in the top 200 boy names.')
if any(name.strip() == girl_name for name in girl_names):
print(girl_name, 'was found in the top 200 girl names.')
girlsnames.txt的格式是什么?.readline()
将在末尾有一个\n
(换行符),因此它永远不会与输入匹配(假设您只在命令行上输入名称)。我不知道你是如何在一个readline()
中读取200个名字的,或者==
应该如何检查它是否包含在那一行中。