Выведите 0, если слово палиндром, и -1, если нет (без условий и циклов)

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

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

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

Значит, вам нельзя использовать оператор if?

blackbrandt 09.07.2019 19:25
string == string[::-1]? Но для этого все равно потребуется if for, чтобы вернуть правильное значение.
Error - Syntactical Remorse 09.07.2019 19:25

Вы можете сделать это в oneliner без условий и циклов! [-1,0][string==string[::-1]] Я не уверен, что это то, что вам нужно. Можете ли вы уточнить, что вы не можете использовать?

BlueSheepToken 09.07.2019 19:30

Это сработало! @BlueSheepToken, но не могли бы вы подробно объяснить «[-1,0]», насколько мне известно. Я не знаю об этом.

dpthegrey 09.07.2019 19:36

@Синяя злая

Patrick Artner 09.07.2019 19:41

Прочтите Как задавать и отвечать на вопросы по домашнему заданию? в разделе "Вопросы о домашнем задании"

wjandrea 09.07.2019 19:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
94
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

string == string[::-1]

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

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

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

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


Как бы то ни было, если бы вам было разрешено использовать условия, я бы порекомендовал тернарный оператор if:

-1 if string == string[::-1] else 0

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

print(str_a == str_a[::-1] and '0' or '-1')

Обратите внимание, что в данном случае это работает, но использование and-or вместо if-else является плохой практикой. Например, если вы переключите использование целых чисел вместо строк, думая, что это будет то же самое, он всегда будет печатать -1, поскольку 0 ложно.

wjandrea 09.07.2019 22:18
Ответ принят как подходящий

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

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

Если вы не хотите использовать ifelse, вы можете просто «обмануть», используя тот факт, что 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)

вполне приемлемо.

Другие вопросы по теме