Python - Задача на палиндром в две строки



Палиндром - число, буквосочетание, слово или текст, одинаково читающееся в обоих направлениях. Например, число 101; слова «топот» в русском языке и фин. saippuakivikauppias (продавец мыла; торговец щёлоком) — самое длинное слово-палиндром в мире; текст «а роза упала на лапу Азора» и пр. - это с википедии. А мы это дело реализуем на Питоне в две строки.

Когда-то я учил язык С, и мне как-то было не по себе когда я видел вот такое:
#include int main() { int n, reversedN = 0, remainder, originalN; printf("Enter an integer: "); scanf("%d", &n); originalN = n; // reversed integer is stored in reversedN while (n != 0) { remainder = n % 10; reversedN = reversedN * 10 + remainder; n /= 10; } // palindrome if orignalN and reversedN are equal if (originalN == reversedN) printf("%d is a palindrome.", originalN); else printf("%d is not a palindrome.", originalN); return 0; }

Говорят что на С++ это выглядит вот так:
#include using namespace std; int main() { int n, num, digit, rev = 0; cout << "Enter a positive number: "; cin >> num; n = num; do { digit = num % 10; rev = (rev * 10) + digit; num = num / 10; } while (num != 0); cout << " The reverse of the number is: " << rev << endl; if (n == rev) cout << " The number is a palindrome."; else cout << " The number is not a palindrome."; return 0; }

Да и на Java не проще:
class PalindromeExample{ public static void main(String args[]){ int r,sum=0,temp; int n=454;//It is the number variable to be checked for palindrome temp=n; while(n>0){ r=n%10; //getting remainder sum=(sum*10)+r; n=n/10; } if(temp==sum) System.out.println("palindrome number "); else System.out.println("not palindrome"); } }

Всё это решение одной задачи на разных языках. И на это чертовски страшно смотреть. Теперь посмотрим, что нам предлагает Питон.

Сразу применим небольшою хитрость. Число, которое мы хотим проверить, будет вводится как строка:
num = str(1232)

Затем мы его просто переворачиваем и даём ему новое имя:
num_test = num[::-1]

Теперь осталось только сравнить:
if num == num_test: print("Is a palindrome") else: print("Is NOT a palindrome")

Полный код:
num = str(1232) num_test = num[::-1] if num == num_test: print("Is a palindrome") else: print("Is NOT a palindrome")

А теперь тоже самое запишем в две строки:
num_test = int(str(num)[::-1]) print(("Is NOT a palindrome", "Is a palindrome")[num == num_test])

Строка 1 - вводимое число преобразуется в строку, переворачивается, заново преобразуется в строку и ему приписывается новое имя.
Строка 2 - If ... esle - тернарный оператор - подробнее в моём блоге.

Всё, и не надо пугать людей.

Всем добра!!

1 комментарий: