Напишите функцию с именем singleline_diff, которая принимает две однострочные строки.Вы можете предположить, что обе строки всегда являются одной строкой и не содержат символов новой строки.Функция должна возвращать индекс первого символа, который отличается между двумя строками.Если строки совпадают, функция должна возвращать константу IDENTICAL, которая уже определена как -1.
Если строки имеют разную длину, но вся более короткая строка соответствует началу более длинной строки,затем первое различие находится в индексе, который находится на единицу после последнего символа в более короткой строке.Другими словами, ни один символ после конца более короткой строки не определен так, чтобы отличаться от любого символа, существующего в более длинной строке в этом месте.
Подсказки: 1) Вам не нужно проверять, действительно лидва входа - это одна строка или нет.Вы можете предположить, что это так.
2) Сначала вы должны проверить длину двух входов и определить длину более короткой линии.
3) Ищите различия в линиях допоследний символ в более короткой строке.
4) Если вы не найдете каких-либо различий, подумайте о том, что вы должны делать в двух возможных случаях: (1) строки имеют одинаковую длину и (2)строки имеют разную длину.
Я написал функцию, как указано в инструкциях, и использовал ряд условных выражений для сравнения длин строк.Как только длины строк определены, я инициализирую индексную переменную от i до 0, которую я использую с циклом for для прохождения символов строк в поисках первого различия.Я использую условные (if, elif и др.) Вместе с возвратами для возврата индекса, в котором произошла разница, или возврата IDENTICAL (что равно -1).
IDENTICAL = -1
def singleline_diff(line1, line2):
"""
Inputs:
line1 - first single line string
line2 - second single line string
Output:
Returns the index where the first difference between
line1 and line2 occurs.
Returns IDENTICAL if the two lines are the same.
"""
if len(line1) > len(line2):
i = 0
for i in range(len(line2)):
if line1[i] == line2[i]:
i += 1
elif line1[i] != line2[i]:
return i
else:
return i+1
elif len(line1) < len(line2):
i = 0
for i in range(len(line1)):
if line1[i] == line2[i]:
i += 1
elif line1[i] != line2[i]:
return i
else:
return i+1
else: #Condition where the lengths of the strings are equal
i = 0
for i in range(len(line1)):
if line1[i] == line2[i]:
i += 1
elif line1[i] != line2[i]:
return i
else:
return IDENTICAL
Я создал шесть тестовых случаев (см. Ниже),То, как мой код написан прямо сейчас, дает мне половину моих тестов.Я зашла в тупик, пытаясь отладить, когда мой код не может вернуть ожидаемые значения.
print(singleline_diff("abcd", "abcd")) #Should return -1, instead get None
print(singleline_diff("abcd", "abdf")) #Should return 2 (Works)
print(singleline_diff("1234566", "1234567")) #Should return 6 (works)
print(singleline_diff("123", "1234")) #Should return 3, instead get None
print(singleline_diff("4321", "321")) #Should return 0 (works)
print(singleline_diff("lollejrlke", "lollejrlkefa")) #Should return 10, instead get None