xrange генерирует строки? Я не понимаю

По какой-то причине переменная x в первом for... изменения цикла от int в str после одной итерации кода. Я сбит с толку относительно того, почему это должно быть, но каждый раз, когда я запускаю этот скрипт, мой набор заканчивается заполнением строк, состоящих из сотен нулей.

Если кому-то интересно, это попытка решить вопрос Эйлера 4.

# A palindromic number reads the same both ways.
# The largest palindrome made from the product
# of two 2-digit numbers is 9009 = 91 99.
# Find the largest palindrome made from the product of two 3-digit numbers.

def palindrome():

    products = set()

    for x in xrange(700,999):
        for y in xrange(700,999):
            temp = x*y
            n = [x for x in str(temp)]
            if temp not in products:
                if len(n)%2 == 0:
                    half = len(n)/2
                    first = n[:half]
                    last = n[half:]
                    last.reverse()
                    if first == last:
                        products.add(temp)

    return products



if __name__ == "__main__":
    n = palindrome()
    print n

4 ответа

В python 2.x списочные выражения просачиваются в переменную. Так что ваш список понимания [x for x in str(temp)] перезаписывает значение х. Но обратите внимание, что он будет установлен обратно в int на следующей итерации внешнего цикла.

Не используйте х внутри следующего понимания списка n = [x for x in str(temp)], Просто выберите другое имя переменной.

Он меняется на строку, потому что вы присваиваете ей строку:

        n = [x for x in str(temp)]

Ошибки, подобные этим, являются причиной, по которой вы должны избегать однобуквенных переменных. Это, как говорится, я обычно использую _ как одноразовая переменная в списках...

1    for x in xrange(700,999):
2        for y in xrange(700,999):
3            temp = x*y
4            n = [x for x in str(temp)]

после шага № 4 n = ['4', '9', '0', '0', '0', '0'], x = '0'

затем для следующего шага #3, temp='0'*701

Другие вопросы по тегам