Python - 字符串比较函数

-1 投票
4 回答
5502 浏览
提问于 2025-04-17 17:49
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。(记得加上输入类型、描述和测试案例的注释)测试这个函数,确保它能正常工作。”

如果我输入‘Jenson’,它能正常工作,但如果我输入其他名字,就会返回False。

4 个回答

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'...,这样每个比较就会一个接一个地进行。

4

试试这样做,

def name(x):
    return x in ('Jenson', 'Amra' ,'McCay', 'Spinner','Jones')
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') 的意思是:

“无论是 Jenson 还是 AmraMcCay 还是 Jones,只要有一个是 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 一样。

撰写回答