Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2015 07:18:03

dedok29
Зарегистрирован: 2015-03-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Код не работает

Спасибо огромное )

Офлайн

#2 Март 25, 2015 18:06:59

Aspergo
Зарегистрирован: 2014-08-31
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Код не работает

terabayt
а что он должен делать? где условие? или мы сами должны угадать
Он должен найти максимальное число, которое получается перемножением двух трехзначных чисел и которое одинаково читается с начала и с конца (например 45654)
ivsatel
AspergoНе разбирался, но попробуй так:
Не выходит(

a=[]
b=[]
for x in range(1,1000):
  for y in range(1,1000):
    z=x*y
    a.append(str(z))
for i in a:
  if i[:]==i[::-1]:
    b.append(int(i))
print max(b), '--->', 'MAX'
А вот это работает (ответ 906609)

Отредактировано Aspergo (Март 25, 2015 18:08:09)

Офлайн

#3 Март 25, 2015 18:19:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Код не работает

Aspergo,
Компьютер никто не спрашивает, хочет он работать или нет, а вот если вас заставить вручную считать и на бумажке записывать, то вы наверняка (по крайней мере я надеюсь на это) постарались бы оптимизировать процесс. В вашем коде ОЧЕНЬ много лишних операций. Например, вы ведь можете сразу определять, является ли произведение x * y полиндромом. Зачем вы сохраняете в списке заведомо неправильные результаты?



Офлайн

#4 Март 25, 2015 18:29:55

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Код не работает

Aspergo
Он должен найти максимальное число, которое получается перемножением двух трехзначных чисел и которое одинаково читается с начала и с конца (например 45654)
m = 0
for x in range(1000, 1, -1):
    for y in range(1000, 1, -1):
        z = x * y
        if str(z) == str(z)[::-1] and m < z:
            m = z
    if m >= (x-1)**2:
        break
print(m)



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Март 25, 2015 18:37:20

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Код не работает

terabayt
весь воспитательный процесс испортил



Офлайн

#6 Март 25, 2015 18:40:12

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Код не работает

FishHook мы играем в злого и хорошего программера! это даже лучше! ))



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Март 25, 2015 20:46:46

Aspergo
Зарегистрирован: 2014-08-31
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Код не работает

Спасибо за ответы! Ошибки понятны.
А что значит это условие?

if m >= (x-1)**2:

И, возможно, в первоначальном коде, в самих условиях проверки, есть бросающиеся в глаза ошибки, которые приводят к тому, что абсолютно несимметричные числа попадают в список?
for x in p:
    if len(x)%2==0:
      for i in range(0, (len(x)/2)):
        if x[i]==x[-i-1]: 
          e.append(int(x))
    elif len(x)%2!=0:
      for i in range(0, len(x)-1/2):
        if x[i]==x[-i-1]:
          e.append(int(x))
print max(e)

Офлайн

#8 Март 26, 2015 00:34:39

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Код не работает

Aspergo
Ошибки понятны.
Aspergo
А что значит это условие?
и что же вы поняли? вот именно эта строчка и сократила как минимум в 5 раз время
в уме пройдите цикл шаг за шагом и все станет понятно
Aspergo
И, возможно, в первоначальном коде, в самих условиях проверки, есть бросающиеся в глаза ошибки, которые приводят к тому, что абсолютно несимметричные числа попадают в список?
1) вот, при этом условии в список будет добавлятся если равны первый и последний символы
if x[i]==x[-i-1]
2)
len(x)-1/2
>>> a = 'qwerty'
>>> len(a)-1/2
6
>>> len(a)
6
>>> (len(a)-1)/2
2

ваш код можно переделать так
p=[]
e=[]
for z in range(1,1000):
  for k in range(1,1000):
    r=z*k
    p.append(str(r))
for x in p:
    for i in range(len(x)/2):
        if x[i]!=x[-i-1]:
            break
    else:
        e.append(int(x))
print max(e)





————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Март 26, 2015 00:35:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version