выведите 0, если слово является палиндромом, и -1, если его нет (без условий и циклов) - PullRequest
0 голосов
/ 09 июля 2019

Мне нужно проверить, является ли строка палиндромом или нет (без условий и циклов) и вывести «0», если строка является палиндромом, и «-1», если это не палиндром.

Я не уверен, что делать после изменения строки на string[::-1]. Как сравнить обе строки для проверки палиндрома без каких-либо петель или условий?

(PS. Я не должен использовать какие-либо циклы или условия (в том числе, если, иначе))

Ответы [ 3 ]

0 голосов
/ 09 июля 2019

Надеюсь, это поможет:

print(str_a == str_a[::-1] and '0' or '-1')
0 голосов
/ 09 июля 2019

Когда вы попросили объяснения, я пишу для вас ответ.

Но имейте в виду, за исключением очень особых случаев (таких как код гольфа), я настоятельно не одобряю эту практику.

Если вы не хотите использовать if else, вы можете просто «обмануть», используя тот факт, что True преобразуется в 1 неявно и False в 0 в некоторых случаях.

Вы можете использовать его двумя способами:

Решение 1

Доступ к элементам в массиве преобразует bool в int, давайте построим массив с нужным элементом в правом индексе:

[-1,0][string==string[::-1]]

Если string==string[::-1] оценивается как True (это палиндром), тогда будет доступен второй элемент массива. В противном случае первый.

Решение 2

Другое решение - найти «функцию», которая преобразует 1 в 0 и 0 в -1. Самый простой f(x) = x - 1

Что приводит к:

(string == string[::-1]) - 1

Имейте в виду, мой комментарий был скорее шуткой, чем реальным решением, вы, вероятно, не должны использовать его в реальном мире!

PS: Под «никакими условиями» я подозреваю, что это означает «без сравнения букв одна за другой», но я думаю, что

if string == string[::-1]:
    print(0)
else:
    print(-1)

полностью приемлемо.

0 голосов
/ 09 июля 2019

Просто для сравнения не требуется никаких циклов или условий:

string == string[::-1]

Это вернет True или False.

Теперь о том, как получить это значение 0 или -1, вот несколько подсказок:

  • Вы можете привести bool к int: True → 0, False → 1
  • Отрицательный нольноль

Я нашел полное решение, но так как это похоже на домашнюю работу, я не хочу просто дать вам.Я надеюсь, что подсказки побудят вас самим разобраться.


Для чего бы это ни стоило, если бы вам позволили использовать условия, я бы порекомендовал троичное if утверждение:

-1 if string == string[::-1] else 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...