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