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 2
een 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 and
operator:
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 word
door 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.