В целом функция вашей функции такова: если длина x равна 5, вернуть True в противном случае, если последний символ строки равен первому, вернуть True, иначе вернуть False
Этот тип условия else условие...else return False лучше всего выражать с помощью оператора или, который возвращает False, только если все условия являются False и возвращает значение первого элемента not-False.Другим выбором является любая функция, которая делает то же самое с любой последовательностью.Вот проверка этих альтернатив для всех ветвей оригинального оператора if:
def function(x):
if len(x) == 5: return True
else: return x[0] == x[-1]
def funcor(x):
return (len(x)==5) or (x[0] == x[-1])
def funcany(x):
return any((len(x)==5, x[0] == x[-1]))
def funcverbal(sequence):
## sequence[0] is the first element of zero based indexed sequence
## endswith is string specific function so sequence must be string
## if it's length is not 5
return len(sequence)==5 or sequence.endswith(sequence[0])
## function is normal data type in Python, so we can pass it in as variable
def test(func):
print('Testing %s function' % func)
for value in ('12345','annb','ansa','23424242',('1','2','1'), 123, '131'):
try:
print ("%r -> %r" % (value,func(value)))
except:
print ("Failed to call function with " + repr(value))
print(10 * '-'+'Finished testing '+str(func) + 10 * '-')
for thisfunction in (function, funcor, funcany, funcverbal):
test(thisfunction)
(функция выделена синим как зарезервированное слово, но это ошибка в процедуре выделения на этом сайте)
В случаедля функции isPalindrome условие длины не является произвольным, но необходимо распознать примитивные случаи, чтобы остановить рекурсию, в случае 'anna' функция палиндрома:
определяет, является ли длина 'anna'меньше 2 (1 или 0), нет, они не сравниваются' a 'с' a ', продолжаются, так как они одинаковы, отбрасывают сравниваемую первую и последнюю букву и вызывают isPalindrome с' nn '
посмотрите, если длина 'nn' меньше 2 (1 или 0), нет, они не сравниваются 'n' с 'n', продолжайте, так как они одинаковы, отбрасывайте сравниваемые первую и последнюю букву и вызывайте isPalindrome с ''
посмотреть, если длина '' меньше 2 (1 или 0), да.Верните True, как мы нашли палиндром.
Вот альтернативная сокращенная функция тестирования палиндрома, основанная на том факте, что реверсивный палиндром такой же, как палиндром.
def isPalindrome(s):
return s==s[::-1]