Controleer of een getal even of oneven is in python

Ik probeer een programma te maken dat controleert of een woord een palindroom is en ik ben zo ver gekomen en het werkt met woorden die een even aantal getallen hebben. Ik weet hoe ik iets moet laten doen als het aantal letters oneven is, maar ik weet gewoon niet hoe ik erachter moet komen of een getal oneven is. Is er een eenvoudige manier om erachter te komen of een getal even of oneven is?

Ter referentie, dit is mijn 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()

Bedankt


Antwoord 1, autoriteit 100%

if num % 2 == 0:
    pass # Even 
else:
    pass # Odd

Het %-teken is als deling, alleen wordt gecontroleerd op de rest, dus als het getal gedeeld door 2een rest heeft van 0, is het zelfs anders vreemd.

Of draai ze om voor een kleine snelheidsverbetering, aangezien elk getal boven de 0 ook als “Waar” wordt beschouwd, kunt u de gelijkheidscontrole overslaan:

if num % 2:
    pass # Odd
else:
    pass # Even 

Antwoord 2, autoriteit 39%

Op dezelfde manier wordt de snelste “modulo 2” (oneven / even) bediening uitgevoerd met behulp van de bitwise andoperator:

if x & 1:
    return 'odd'
else:
    return 'even'

met bitwise en operator

  • Het idee is om te controleren of het laatste bit van het nummer is ingesteld of niet . Als laatste bit is ingesteld, is het nummer vreemd , anderszins zelfs.
  • Als een getal vreemd is &(bitgegewijs en) van het nummer door 1 zal 1 zijn, omdat het laatste bit al zou worden ingesteld. Anders geeft het 0 als output.

Antwoord 3, Autoriteit 5%

Het zou er niet toe moeten doen of het woord een even of oneven bedrag heeft voor letters:

def is_palindrome(word):
    if word == word[::-1]:
        return True
    else:
        return False

Antwoord 4, Autoriteit 2%

Gebruik de ModuLo-operator :

if wordLength % 2 == 0:
    print "wordLength is even"
else:
    print "wordLength is odd"

Voor uw probleem is de eenvoudigste om te controleren of het woord gelijk is aan zijn omgekeerde broer. U kunt dat doen met word[::-1], die de lijst maken van worddoor elk personage van het einde naar het begin te nemen:

def is_palindrome(word):
    return word == word[::-1]

Antwoord 5

Een van de eenvoudigste manieren is om de Modulus-operator% te gebruiken. Als n% 2 == 0, dan is uw nummer zelfs.

Ik hoop dat het helpt,


Antwoord 6

De middelste letter van een woord met een oneven lengte is niet relevant om te bepalen of het woord een palindroom is. Negeer het gewoon.

Hint: het enige wat je nodig hebt is een kleine aanpassing aan de volgende regel om dit voor alle woordlengtes te laten werken:

secondHalf = word[finalWordLength + 1:]

P.S. Als u erop staat de twee gevallen afzonderlijk te behandelen, zou if len(word) % 2: ...u vertellen dat het woord een oneven aantal tekens heeft.

Other episodes