Найти - Пользователи
Полная версия: Код не работает
Начало » Python для новичков » Код не работает
1 2
dedok29
Спасибо огромное )
Aspergo
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)
FishHook
Aspergo,
Компьютер никто не спрашивает, хочет он работать или нет, а вот если вас заставить вручную считать и на бумажке записывать, то вы наверняка (по крайней мере я надеюсь на это) постарались бы оптимизировать процесс. В вашем коде ОЧЕНЬ много лишних операций. Например, вы ведь можете сразу определять, является ли произведение x * y полиндромом. Зачем вы сохраняете в списке заведомо неправильные результаты?
terabayt
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)
FishHook
terabayt
весь воспитательный процесс испортил
terabayt
FishHook мы играем в злого и хорошего программера! это даже лучше! ))
Aspergo
Спасибо за ответы! Ошибки понятны.
А что значит это условие?
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)
terabayt
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)



This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB