Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check for palindrome using Python logic

I'm trying to check for a palindrome with Python. The code I have is very for-loop intensive.

And it seems to me the biggest mistake people do when going from C to Python is trying to implement C logic using Python, which makes things run slowly, and it's just not making the most of the language.

I see on this website. Search for "C-style for", that Python doesn't have C-style for loops. Might be outdated, but I interpret it to mean Python has its own methods for this.

I've tried looking around, I can't find much up to date (Python 3) advice for this. How can I solve a palindrome challenge in Python, without using the for loop?

I've done this in C in class, but I want to do it in Python, on a personal basis. The problem is from the Euler Project, great site By the way,.

def isPalindrome(n):     lst = [int(n) for n in str(n)]     l=len(lst)     if l==0 || l==1:         return True     elif len(lst)%2==0:         for k in range (l)         #####     else:         while (k<=((l-1)/2)):             if (list[]):                 #####     for i in range (999, 100, -1):     for j in range (999,100, -1):         if isPalindrome(i*j):             print(i*j)             break 

I'm missing a lot of code here. The five hashes are just reminders for myself.

Concrete questions:

  1. In C, I would make a for loop comparing index 0 to index max, and then index 0+1 with max-1, until something something. How to best do this in Python?

  2. My for loop (in in range (999, 100, -1), is this a bad way to do it in Python?

  3. Does anybody have any good advice, or good websites, or resources for people in my position? I'm not a programmer, I don't aspire to be one, I just want to learn enough so that when I write my bachelor's degree thesis (electrical engineering), I don't have to simultaneously LEARN an applicable programming language while trying to obtain good results in the project. "How to go from basic C to great application of Python", that sort of thing.

  4. Any specific bits of code to make a great solution to this problem would also be appreciated, I need to learn good algorithms.. I am envisioning 3 situations. If the value is zero or single digit, if it is of odd length, and if it is of even length. I was planning to write for loops...

PS: The problem is: Find the highest value product of two 3 digit integers that is also a palindrome.

like image 525
DrOnline Avatar asked Jun 26 '13 22:06

DrOnline


People also ask

What is the logic of palindrome in Python?

Here is source code of the Python Program to check whether a given number is a palindrome. The program output is also shown below. n=int(input("Enter number:")) temp=n rev=0 while(n>0): dig=n%10 rev=rev*10+dig n=n//10 if(temp==rev): print("The number is a palindrome!") else: print("The number isn't a palindrome!") 1.

How do you check if something is a palindrome in Python?

Use the Python Reversed Function to Check if a String is a Palindrome. Python comes with a built-in function, reversed() , which, well, reverses an item. You can pass in some iterable item, be it a string, a list, or anything else ordered, and the function returns the reversed version of it.

How do you find palindrome numbers in logic?

A simple method for this problem is to first reverse digits of num, then compare the reverse of num with num. If both are same, then return true, else false.


2 Answers

A pythonic way to determine if a given value is a palindrome:

str(n) == str(n)[::-1] 

Explanation:

  • We're checking if the string representation of n equals the inverted string representation of n
  • The [::-1] slice takes care of inverting the string
  • After that, we compare for equality using ==
like image 197
Óscar López Avatar answered Oct 23 '22 07:10

Óscar López


An alternative to the rather unintuitive [::-1] syntax is this:

>>> test = "abcba" >>> test == ''.join(reversed(test)) True 

The reversed function returns a reversed sequence of the characters in test.

''.join() joins those characters together again with nothing in between.

like image 42
RichieHindle Avatar answered Oct 23 '22 09:10

RichieHindle