0

论据是:

给定 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。这里有什么问题 ?

4

5 回答 5

2

你应该使用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
于 2013-03-22T08:52:49.920 回答
2

您正在比较字符,您需要按长度比较字符串:

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
于 2013-03-22T08:54:51.750 回答
2

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

a = a.lower()
b = b.lower()
print a.endswith(b) or b.endswith(a)

或者,如果您想使用 max、min 函数:

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

但在我看来,它不像endswith函数那样明确。此外,此功能不适用于相同长度的字符串。

于 2013-03-22T09:04:11.310 回答
1

另一个想法:

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

于 2013-03-22T08:59:50.640 回答
0

如果你看看你的变量,你会很快发现出了什么问题:

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”。

于 2013-03-22T08:59:18.050 回答