Мне нужно проверить, является ли строка палиндромом или нет (без условий и циклов), и вывести «0», если строка является палиндромом, и «-1», если это не палиндром.
Я не уверен, что делать после изменения строки на string[::-1]
.
Как сравнить обе строки, чтобы проверить палиндром без каких-либо циклов или условий?
(PS. Я не должен использовать какие-либо циклы или условия (включая if, else))
string == string[::-1]
? Но для этого все равно потребуется if
for, чтобы вернуть правильное значение.
Вы можете сделать это в oneliner без условий и циклов! [-1,0][string==string[::-1]]
Я не уверен, что это то, что вам нужно. Можете ли вы уточнить, что вы не можете использовать?
Это сработало! @BlueSheepToken, но не могли бы вы подробно объяснить «[-1,0]», насколько мне известно. Я не знаю об этом.
@Синяя злая
Прочтите Как задавать и отвечать на вопросы по домашнему заданию? в разделе "Вопросы о домашнем задании"
Просто сравнение не требует никаких циклов или условий:
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 ложно.
Поскольку вы просили объяснить, я пишу ответ для вас.
Но имейте в виду, за исключением особых случаев (таких как код для гольфа), я сильно не одобряю эту практику.
Если вы не хотите использовать if
else
, вы можете просто «обмануть», используя тот факт, что True
неявно преобразуется в 1
, а False
в 0
в некоторых случаях.
Вы можете использовать его двумя способами:
Элементы доступа в массиве преобразуют bool
в int
, давайте создадим массив с правильным элементом по правильному индексу:
[-1,0][string==string[::-1]]
Если string==string[::-1]
оценивается как True
(это палиндром), то будет осуществлен доступ ко второму элементу массива. В противном случае первое.
Другое решение — найти «функцию», которая преобразует 1
в 0
и 0
в -1
. Самый простой f(x) = x - 1
Что приводит к :
(string == string[::-1]) - 1
Имейте в виду, мой комментарий был скорее шуткой, чем реальным решением, вам, вероятно, не следует использовать его в реальном мире!
PS: Под "без условий" я подозреваю, что имеется в виду "без сравнения букв одна за другой", но я думаю,
if string == string[::-1]:
print(0)
else:
print(-1)
вполне приемлемо.
Значит, вам нельзя использовать оператор
if
?