如何区分不同的名字?

时间:2017-03-14 14:47:07

标签: python

图示出来!它不喜欢答案,但我在第一个名称中添加了一个空格字符,然后编辑了变量lastName

def nameFinder(rollCall, aName):
    spaceCharacter = aName.index(" ")
    firstName = aName[0:spaceCharacter]
    lastName = aName[spaceCharacter:len(aName)+1]
    if (firstName in rollCall) or (lastName in rollCall):
        return True
    else:
        return False



rollCall = "Bobby Lee", "Margaret Me"
print(nameFinder(rollCall, "Bob Ce"))

对于这个功能,我必须找到第一个或最后一个名字是否在rollCall中。它不必是第一个也是最后一个,只有第一个或最后一个。例如,“Bob Ce”将导致False,因为“Bob”不在rollCall中。我怎样才能做到这一点,因为它会导致真实。

2 个答案:

答案 0 :(得分:1)

从代码中删除(firstName in studentList) or后,我将False作为输出。

我相信您的if语句中的firstName in studentList为True,因此True or False会产生True的输出

另请注意,您正在lastName in rollCall语句中检查if,代码lastName' Ce'

答案 1 :(得分:0)

您的版本已修改

基本上,我们拆分aName然后循环遍历rollCall,尝试匹配所有名称。如果匹配,请返回 true 。否则,请返回 false

def nameFinder(rollCall, aName):
    studentName = aName.split(" ")
    for name in rollCall:
        rollCallName = name.split(" ")
        if rollCallName[0] == studentName[0] or rollCallName[1] == studentName[1]:
            return True
    return False

rollCall = "Bobby Lee", "Margaret Me"
print(nameFinder(rollCall, "Bob Ce"))

占用较少行数的版本

以下代码首先将两个列表合并为First,Last,First2,Last2,然后将扫描输入的名称,如果至少有一个匹配,则返回true:

def nameFinder(rollCall, aName):
    array_merged = [partName for fullname in rollCall for partName in fullname.split(" ")]
    return any([checkingPartName in array_merged for checkingPartName in aName.split(" ")])

rollCall = ["Bobby Lee", "Margaret Me"]
print(nameFinder(rollCall, "Bob Ce"))

注意:由于我们正在检查列表中是否存在任何名称,因此我认为合并这两个列表会简化代码。但是,如果你只被给予[“Bobby Lee”,“Margaret Me”],那么这个功能就像魅力一样。