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个名字的,或者
    ==
    应该如何检查它是否包含在那一行中。