-1
def name(x):
    return x==('Jenson'or'Amra'or'McCay'or'Spinner'or'Jones')
print(name('Jenson'))
print(name('McCay'))

这是问题:

“编写一个函数,输入一个人的名字(例如,“smith”、“jones”等)。这个函数应该检查这个名字是否是板上的五个人名之一。五个名称是:“Jenson”、“Amra”、“McCay”、“Spinner”和“Jones”。如果输入到函数中的名称是这五个名称之一,则该函数应返回布尔值 True,如果它不是,函数应该返回 False。(记住输入类型、描述和测试用例的注释)测试函数以确保它工作。

如果我在做简森,它会起作用,但如果我输入任何其他名字,它就会出现错误。

4

4 回答 4

4

像这样试试

def name(x):
    return x in ('Jenson', 'Amra' ,'McCay', 'Spinner','Jones')
于 2013-03-04T04:39:00.880 回答
3

“长”路怎么样:

def check_name(x):
   names_to_check = ('Jenson','Amra','McCay','Spinner','Jones')
   for i in names_to_check:
       if i == x:
          return True
   return False

这是您的代码中发生的事情:

x = 'Jenson', 因为这是你传入的。

这一行x == ('Jenson' or 'Amra' or 'McCay' or 'Jones')实际上是一个布尔运算,它的结果总是Jenson.

布尔运算检查真值,Python 中的非空字符串总是True. 所以实际上('Jenson' or 'Amra' or 'McCay' or 'Jones')说的是:

“要么JensonAmra要么McCayJones其中任何一个是True,将值设置为那个”。

由于Jenson是第一项,并且它的True(即,它不是一个空字符串),整个表达式等于Jenson(这就是为什么它只在你传入时才有效Jenson)。

一个简单的例子:

>>> ('a' or 'b' or 'c')
'a'
>>> ('b' or 'a' or 'c')
'b'
>>> ('' or '' or 'a')
'a'
>>> (0 or 0 or 1)
1
>>> (False or False or True)
True

最后三个说明了相同的比较。我正在检查两个空字符串和'a'. 由于 Python 中存在一个空字符串False,因此“True”的唯一内容是'a',这是返回的内容,就像我在与 进行比较0一样1

于 2013-03-04T04:43:22.633 回答
0

我想正在发生的事情是('Jenson'or'Amra'or'McCay'or'Spinner'or'Jones')首先被评估,然后被评估为'Jenson'. 之前计算x的那个甚至被考虑在内,因为它在括号中。然后x检查是否相等Jenson。您需要使用更高级的语法,例如x in...Adem 的答案,或者使用return x == 'Jenson' or x == 'Amra' or x == 'McCay'...以便每个比较一个接一个地运行。

于 2013-03-04T04:49:25.407 回答
0

语法 x==('Jenson' or 'Amra' or 'McCay' or 'Spinner'or'Jones') 是错误的。应该像 Adem 说的那样。或者可能

def name(x):
    return x=='Jenson' or x== 'Amra' or x  == 'McCay' or x == 'Spinner' or x == 'Jones'
于 2013-03-04T04:48:35.150 回答