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

文字を比較しているので、文字列を長さで比較する必要があります。

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

あなたが使用する必要があります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 = 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。また、この関数は同じ長さの文字列では正しく機能しません。

于 2013-03-22T09:04:11.310 に答える
1

別のアイデア:

print (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 に答える