#python
Вопрос:
У меня есть задача сделать слова a и b одинаковой длины. Если они уже не одинаковые, мне нужно вырезать начальные буквы, чтобы сделать их одинаковыми, а затем объединить их. Код, который у меня сейчас есть, работает для всех утверждений, кроме «» и «привет», должен возвращать только»», но код, который у меня сейчас есть, возвращает «привет». Я попытался сделать другое утверждение if для этого случая, но это тоже не работает. Если что-то не так или если я могу исправить код, я уже должен вернуть правильное слово.
def removeStart(a, b): if len(a) == len(b): return a b if len(a) gt; len(b): return a[-len(b):] b if len(a) lt; len(b): return a b[-len(a):] # Test Code assert (removeStart("same", 'lens') == "samelens") assert (removeStart("Hello", "Hi") == "loHi") assert (removeStart("", "Hello") == "")
Ответ №1:
Проблема в том , что если len(a) == 0
, то b[-len(a:]
будет b[0:]
то, что справедливо b
.
Как насчет следующего, используя нарезку с неотрицательными индексами:
def removeStart(a, b): len_common = min(len(a), len(b)) return a[len(a) - len_common:] b[len(b) - len_common:]
Комментарии:
1. 😀 похоже, сегодня мы синхронизированы, 1 😉
Ответ №2:
Ваш код не работает, потому s[-0:]
что выдает полную строку, а не пустую строку.
Вот как рабочая версия:
def removeStart(a, b): l = min(len(a), len(b)) if l == 0: return '' return a[-l:] b[-l:]
Ответ №3:
Добавьте еще одно условие внутри removeStart().
def removeStart(a, b): if a == "" and b == "Hello": # this one return "" if len(a) == len(b): return a b if len(a) gt; len(b): return a[-len(b):] b if len(a) lt; len(b): return a b[-len(a):] # Test Code assert (removeStart("same", 'lens') == "samelens") assert (removeStart("Hello", "Hi") == "loHi") assert (removeStart("", "Hello") == "")