Python-boolean问题

Python-boolean问题,python,Python,理由是: 给定2个字符串,将其改为小写,并检查其中一个是否为 在另一端 我的答案是: a="xyz" b="12xyz" a = a.lower() b = b.lower() c=max(a,b) d=min(a,b) e=len(d) if d==c[-e:]: print True else: print False 它应该返回True。但它返回False。当我给出此值时: a="ambala12xyz" b="12xyz" 它返回True。这里有什么问题 您应该使用endswit

理由是:

给定2个字符串,将其改为小写,并检查其中一个是否为 在另一端

我的答案是:

a="xyz"
b="12xyz"
a = a.lower()
b = b.lower()
c=max(a,b)
d=min(a,b)
e=len(d)
if d==c[-e:]:
 print True
else:
 print False
它应该返回
True
。但它返回
False
。当我给出此值时:

a="ambala12xyz"
b="12xyz"

它返回
True
。这里有什么问题

您应该使用
endswith

In [13]: a="ambala12xyz"

In [14]: b="12xyz"

In [15]: b.endswith(a)
Out[15]: False

In [16]: a="xyz"

In [17]: b="12xyz"

In [18]: b.endswith(a)
Out[18]: True

如果要比较字符,则需要按长度比较字符串:

a="xyz"
b="12xyz"
a = a.lower()
b = b.lower()
if len(a) > len(b):
  c, d = a, b
else:
  c, d = b, a
e=len(d)
# print d==c[-e:]
# or:
if d==c[-e:]:
 print True
else:
 print False

如果查看变量,您将很快发现问题所在:

a: xyz
b: 12xyz
c: xyz
d: 12xyz
e: 5
c[-e]: xyz
那么很明显,d!=c[-e:](12xyz!=xyz)

你做错的是你假设

min("abc", "defgh")
将返回3,但在对字符串执行max()和min()时,您正在比较哪个字符串是“高”还是“低”,因此实际上将返回“abc”

另一个想法:


打印(a.lower().endswith(b.lower())或b.lower().endswith(a.lower())

我认为最短、最直观的方法是:

a = a.lower()
b = b.lower()
print a.endswith(b) or b.endswith(a)
或者,如果要使用最大、最小函数:

a = a.lower()
b = b.lower()
c = max(a, b, key=len)
d = min(a, b, key=len)
print d == c[-len(d):]

但在我看来,这并不像使用
endswith
函数那样明确。同样,此函数不能正确处理相同长度的字符串。

检查c和d的值
max
min
不要根据长度(这似乎是您的方法所基于的前提)比较字符串,而是根据它们的排序顺序进行比较。例如,
max('abc','c')
返回
c
@FelixKling:实际上,在python中,您可以使用
max/min
通过长度进行比较:
x=max(a,b,key=len)
没有这个我知道另一种方法。但是这里有问题吗?没有-正如其他地方提到的,问题是
c=min(a,b)
不能使
c
等于最短的字符串为什么
min()
函数返回最短的字符串。不是吗?我刚刚将它保存到variables
c
@sje397中,为什么要执行.lower()方法4次,而您可以执行它两次?它减慢了程序…@Denis Nikanoov只是想说明一下我先检查了最小值和最大值。所以e是3。它将用最小值检查max的最后3个字符。实际上,当您对字符串执行“max()”时,它将返回“highest”字符串,而不是最大字符数。所以max(“xyz”,“12xyz”)不会返回5,而是返回“xyz”(因为“xyz”按字母顺序排在“12xyz”之后)。这就是我说你应该打印变量的意思。没有这个,我可以用
if/else
完成整个过程。但是我提到的代码有什么问题呢?如果b.endswith(a),你也可以这样做。顺便说一句,导致错误的是
max
min
max()/min()
的返回结果是什么?最短?@slash-bang:正如我在评论中指出的,
max
min
按元素的自然顺序(对于字符串,它是字母顺序)对元素进行排序,然后返回排序列表中的最后一个或第一个元素。对,它的长度不同。因此需要添加更多行。