Логика в greater
не совсем верна, когда речь идет о случае, когда одна строка является левой подстрокой другой:
if len(str1)>len(str2):
if str1[len(str1)-len(str2)-1]>str1[0]:
return 1
else:
return -1
Здесь вы неправильно справляетесь со случаем, когда str1[len(str1)-len(str2)-1]
равно str1[0]
. В этом случае вы должны выполнить итерацию дальше, увеличив индекс в обеих строках (так же, как вы делали в первой части алгоритма). Поэтому измените приведенный выше код на:
if len(str1)>len(str2):
for i in range(len(str2),len(str1)):
if str1[i]>str1[i-len(str2)]:
return 1
if str1[i]<str1[i-len(str2)]:
return -1
... и сделайте аналогичное изменение для зеркального корпуса.
Однако есть гораздо более простой способ приблизиться к этому. В функции greater
вы можете просто объединить две строки двумя возможными способами и сравнить, чтобы увидеть, какая из этих двух больше:
def cmp(a, b): # This function was included in Python 2.x, but no longer in 3.x
return (a > b) - (a < b)
def greater(str1, str2):
return cmp(str1 + str2, str2 + str1)