'float' objet ne peut pas être interprété comme int, mais la conversion de int rendements pas de sortie

Donc, je suis en train de tester, si quelque chose est un palindrome. Voici mon code:

Cette fonction retourne une chaîne de caractères de la première moitié d'une chaîne plus longue. ("TEST" retourne "TE", "BONJOUR") renvoie "IL")

def takeStart(s):
    start = ""

    # The following determines the final index of the first half

    if len(s)%2==0:  
        a = (len(s)/2)-1
    else:
        a = ((len(s)-1)/2)-1

    for i in range(a):
        start+=s[i]
    return start

Cette fonction retourne une chaîne de caractères de la seconde moitié d'une chaîne plus longue. ("TEST" retourne "ST", "BONJOUR") renvoie "LO")

def takeEnd(s):  
    end = ""

    # The following determines the beginning index of the second half

    if len(s)%2==0:
        a = (len(s)/2)
    else:
        a = ((len(s)-1)/2)

    for i in range(a,len(s)):
        end+=s[i]
    return end

Cette fonction retourne une chaîne de caractères. ("TEST" retourne "TSET", "BONJOUR") renvoie "OLLEH")

def flip(s):
    flipped = ""
    for i in range(1,len(s)):
        flipped+=s[len(s)-i]
    flipped+=s[0]
    return flipped

Ce code prend chaque produit de deux nombres de 3 chiffres, et vérifie si c'est un palindrome

for i in range(100,1000):
    for q in range(100,1000):
        a = i*q
        if takeStart(str(a)) == flip(takeEnd(str(a))):
            print(str(a))

Lorsque ce code est exécuté, il affiche:

Traceback (most recent call last):
  File "[redacted]", line 39, in <module>
    if takeStart(str(a)) == flip(takeEnd(str(a))):
  File "[redacted]", line 14, in takeStart
    for i in range(a):
TypeError: 'float' object cannot be interpreted as an integer

Bien, j'ai pensé que je viens de convertir un nombre entier et que tout devrait être fait enfler.

Faire qui apparaît à supprimer toutes les erreurs, mais il n'y a PAS de sortie que ce soit. (Il y a de nouvelles lignes à chaque fois ce qui me fait penser ça fonctionne mais pas outputing des données)

Toutes les idées sur le pourquoi de ce qui se passe?

Mise à JOUR: mon code maintenant:

def takeStart(s):
    start = ""
    if len(s)%2==0:
        a = (len(s)//2)
    else:
        a = (len(s)-1)//2
    return start[0:a]

def takeEnd(s):  
    end = ""
    if len(s)%2==0:
        a = (len(s)//2)
    else:
        a = ((len(s)-1)//2)

    return end[int(a):len(s)]

def flip(s):
    return s[::-1]

for i in range(100,1000):
    for q in range(100,1000):
        a = i*q
        if takeStart(str(a)) == flip(takeEnd(str(a))):
            print(str(a))

C'est juste à la sortie de chaque numéro.
J'ai testé chaque méthode et ils sont de retour les cordes à vide. (Je suppose), qui est la raison pour laquelle chaque nombre est le passage du palindrome de vérifier et d'impression.

êtes-vous en cours d'exécution avec python 2 et python 3?
Comme une note de côté, vous êtes ce qui en fait un beaucoup plus difficile qu'il doit être. Par exemple, au lieu de boucler sur les indices un par un, il suffit d'utiliser une tranche.
On dirait que vous êtes à l'aide de Python 3, où le a finit un float comme un résultat de la division des opérations... Vous pouvez forcer la division entière à l'aide de // à la place, mais je n'ai pas trop pensé, si c'est ce que vous voulez faire... comme @abarnet mentionne - il y a beaucoup plus simple des façons de le faire (qui ressemble à une Euler défi...)

OriginalL'auteur Cortney Reagle | 2013-10-22