How Do I Check If I Am Registered To Vote
I'm trying to make a program which checks if a word is a palindrome and I've gotten so far and it works with words that have an even amount of numbers. I know how to make it do something if the amount of letters is odd but I just don't know how to find out if a number is odd. Is there any simple way to find if a number is odd or even?
Just for reference, this is my code:
a = 0 while a == 0: print("\n \n" * 100) print("Please enter a word to check if it is a palindrome: ") word = input("?: ") wordLength = int(len(word)) finalWordLength = int(wordLength / 2) firstHalf = word[:finalWordLength] secondHalf = word[finalWordLength + 1:] secondHalf = secondHalf[::-1] print(firstHalf) print(secondHalf) if firstHalf == secondHalf: print("This is a palindrom") else: print("This is not a palindrom") print("Press enter to restart") input()
Thanks
asked Feb 17 '14 at 19:03
user3320350user3320350
925 1 gold badge 6 silver badges 4 bronze badges
1
6 Answers 6
if num % 2 == 0: pass # Even else: pass # Odd
The %
sign is like division only it checks for the remainder, so if the number divided by 2
has a remainder of 0
it's even otherwise odd.
Or reverse them for a little speed improvement, since any number above 0 is also considered "True" you can skip needing to do any equality check:
if num % 2: pass # Odd else: pass # Even
answered Feb 17 '14 at 19:05
DeadChexDeadChex
4,030 1 gold badge 24 silver badges 32 bronze badges
3
-
is 0(Zero) considered an even in python or does it need a separate (or) statement in the condition? e.g. if num % 2 == 0: or num == 0
Feb 15 '19 at 4:32
-
0 would be considered even. Since 0/2 = 0 Remainder 0, 0%2 is 0
Feb 16 '19 at 17:32
Similarly to other languages, the fastest "modulo 2" (odd/even) operation is done using the bitwise and
operator:
if x & 1: return 'odd' else: return 'even'
Using Bitwise AND operator
- The idea is to check whether the last bit of the number is set or not. If last bit is set then the number is odd, otherwise even.
- If a number is odd
&
(bitwise AND) of the Number by 1 will be 1, because the last bit would already be set. Otherwise it will give 0 as output.
answered Feb 17 '14 at 19:07
lejlotlejlot
59.5k 8 gold badges 125 silver badges 151 bronze badges
6
-
"Explicit is better than implicit. ; Simple is better than complex.", from The Zen of Python
Feb 17 '14 at 19:13
-
Because
num % 2
is more explicit thannum & 1
? Python doesn't have a builtinodd()
function, so you're not going to get more explicit than this unless you write your own, in which case it still doesn't matter which method you use to implement it.Nov 17 '18 at 14:53
-
I think @MaximeLorant refers to the fac that the bitwise and operation is a kind of obscure way to do this, although the fastes. If you are not going for speed, the modulo operation is the clearest way to do it.
Nov 28 '18 at 3:19
-
That's right @Puff. The modulo operator is well known for such use cases, while the bitwise operator on numbers is not that common. Plus, both solutions seem to run at the same speed on my PC (using
timeit.timeit('a = random.randint(1, 1000); a & 1', setup='import random', number=1000000)
, I get 1.1109 for bitwise and 1.1267 for modulo...) I still agree with my comment from 2014, hooray :-)Nov 28 '18 at 9:03
-
This is interesting as I've tried running this with timeit as well. I believe that since python wraps numbers as objects, the underlying code may not be as optimized for the AND operation. From working with assembly, I know the bitwise AND is faster (by far) than the modulo operation (which uses a divide and picks up the remainder register). This can be tested with other languages. I disagree about being explicit and readable ... but perhaps it's easier for a novice to understand.
Aug 17 '20 at 1:37
It shouldn't matter if the word has an even or odd amount fo letters:
def is_palindrome(word): if word == word[::-1]: return True else: return False
answered Feb 17 '14 at 19:05
kylieCattkylieCatt
9,714 5 gold badges 39 silver badges 51 bronze badges
3
-
Why not just
return word == word[::-1]
? Return True if condition is True and return False if condition is false, is the same as return condition...Feb 17 '14 at 19:18
-
@Hyperboreus Just want to be as explicit as possible since I ahve a feeling that the OP is very new to Python.
Feb 17 '14 at 19:21
-
This one trumps my own kludgy solution in both simplicity and clarity!
Mar 2 '16 at 13:04
Use the modulo operator:
if wordLength % 2 == 0: print "wordLength is even" else: print "wordLength is odd"
For your problem, the simplest is to check if the word is equal to its reversed brother. You can do that with word[::-1]
, which create the list from word
by taking every character from the end to the start:
def is_palindrome(word): return word == word[::-1]
answered Feb 17 '14 at 19:05
Maxime LorantMaxime Lorant
30.6k 16 gold badges 82 silver badges 94 bronze badges
0
One of the simplest ways is to use de modulus operator %. If n % 2 == 0, then your number is even.
Hope it helps,
answered Feb 17 '14 at 19:05
Esteban AlivertiEsteban Aliverti
5,896 2 gold badges 17 silver badges 30 bronze badges
The middle letter of an odd-length word is irrelevant in determining whether the word is a palindrome. Just ignore it.
Hint: all you need is a slight tweak to the following line to make this work for all word lengths:
secondHalf = word[finalWordLength + 1:]
P.S. If you insist on handling the two cases separately, if len(word) % 2: ...
would tell you that the word has an odd number of characters.
answered Feb 17 '14 at 19:05
NPENPE
453k 97 gold badges 903 silver badges 981 bronze badges
Not the answer you're looking for? Browse other questions tagged python or ask your own question.
How Do I Check If I Am Registered To Vote
Source: https://stackoverflow.com/questions/21837208/check-if-a-number-is-odd-or-even-in-python
Posted by: bennettfactly.blogspot.com
I don't know how you'd express this in Python, but (wordlength mod 2)== 1 will be true if a word has an odd number of characters.
–user1864610
Feb 17 '14 at 19:05