2013-03-04 92 views
-1
def name(x): 
    return x==('Jenson'or'Amra'or'McCay'or'Spinner'or'Jones') 
print(name('Jenson')) 
print(name('McCay')) 

这是一个问题:Python的 - 功能做字符串比较

“编写一个函数,需要输入一个人的名字(例如, ‘史密斯’,‘琼斯’等)这个函数应该检查名字 是否是董事会中五个名字中的一个,这五个名字是: “Jenson”,“Amra”,“McCay”,“Spinner”和“Jones” 。如果名称输入 进入函数是这五个名字之一,函数 返回布尔值True,如果不是,则fu应该 返回False。 (记得输入类型,描述和 测试用例评论)测试功能,以确保它工作。”

它的工作原理,如果我做简森但它出来的假,如果我把在任何其他名称。

+0

还有什么是我的方式来解释,所以我可以理解我做错了什么 – 2013-03-04 04:41:49

+0

为什么你不发布你的代码片段,以便每个人都可以看看什么是缺少或出错? – Tuxdude 2013-03-04 04:57:11

+0

刚才提到你的(已删除)问题,请不要在你问他们问题时删除问题 - 人们花时间帮助你,而你刚刚删除了他们的评论回应。该主题中也有几项真正的帮助。 – halfer 2013-03-18 18:00:56

回答

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')要说的是:

“要么JensonAmraMcCayJones哪一方是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,唯一是“真”的是'a',这就是返回的结果,就像我在比较01一样。

+0

感谢您的详细解释 – 2013-03-04 05:07:07

4

尝试这样,

def name(x): 
    return x in ('Jenson', 'Amra' ,'McCay', 'Spinner','Jones') 
+0

任何其他方式,因为我们还没有学到,但 – 2013-03-04 04:40:03

+0

@IanBerke祝你好运:) – 2013-03-04 04:45:25

+1

使用'in'运营商,并给他们一个大惊喜;-) – 2013-03-04 04:51:30

0

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

def name(x): 
    return x=='Jenson' or x== 'Amra' or x == 'McCay' or x == 'Spinner' or x == 'Jones' 
0

我想象的情况是,('Jenson'or'Amra'or'McCay'or'Spinner'or'Jones')被首先评估,被评估为'Jenson'。这是在x之前计算的,因为它在括号内。然后检查xJenson之间是否相等。您需要像Adem的答案那样使用更高级的语法,如x in...,否则使用return x == 'Jenson' or x == 'Amra' or x == 'McCay'...,以便每个比较都会一个接一个地运行。

+1

其实,'('简森'或'Amra'or'McCay'or'Spinner'或'Jones')'评估为'Jenson',这就是简森为什么会工作,但其他一切都会返回错误 – Matt 2013-03-04 04:50:49

+0

哦,你是对的,那就是会发生什么!我的错。 – 2013-03-04 04:52:20

+0

编辑答案反映,以免混淆OP。谢谢你的纠正。 – 2013-03-04 04:53:15