Python - 用于进行字符串比较的函数

时间:2013-03-04 04:38:11

标签: python string-comparison

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

这就是问题:

  

“编写一个函数,将一个人的名字作为输入(例如,   “史密斯”,“琼斯”等)此功能应检查是否有名称   是董事会中五个人的名字之一。这五个名字是:   “Jenson”,“Amra”,“McCay”,“Spinner”和“Jones”。如果输入名称   进入函数是这五个名称之一,功能应该   返回布尔值True,如果不是,则函数应该返回   返回False。 (记住输入类型,描述和注释的注释   测试用例)测试功能以确保其正常工作。“

如果我正在做Jenson,它会起作用,但如果我输入任何其他名称,它会显示为false。

4 个答案:

答案 0 :(得分:4)

试试这个,

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

答案 1 :(得分: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',这就是返回的内容,就像我将0与{{1}进行比较一样}。

答案 2 :(得分: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'

答案 3 :(得分:0)

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