Пытаюсь создать программу, которая высчитает наименьшее число, которое делится на все числа от 2 до 20, выдает "NameError"

IgorekBeast

Новичок
Пользователь
Апр 28, 2021
5
0
1
Windows
Python 3.8.9
Вот программа:
a = 1
c == False
while c == False:
if a % 2 == 0:
if a % 3 == 0:
if a % 4 == 0:
if a % 5 == 0:
if a % 6 == 0:
if a % 7 == 0:
if a % 8 == 0:
if a % 9 == 0:
if a % 10 == 0:
if a % 11 == 0:
if a % 12 == 0:
if a % 13 == 0:
if a % 14 == 0:
if a % 15 == 0:
if a % 16 == 0:
if a % 17 == 0:
if a % 18 == 0:
if a % 19 == 0:
if a % 20 == 0:
print('Ура, число найдено!')
print(a)
c == True
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
else:
a =+ 1
 

IgorekBeast

Новичок
Пользователь
Апр 28, 2021
5
0
1
Когда скопировал код, пропуски с помощью Tab были, но когда опубликовал то они пропали. Так что извините
 

IgorekBeast

Новичок
Пользователь
Апр 28, 2021
5
0
1
Каждое "else" предназначено для своего "if"
 

Ципихович Эндрю

Новичок
Пользователь
Мар 27, 2021
66
2
8
поправьте, и выложите на форум, в форме есть треугольник направленный вниз и подсказка "Вставить"
 
  • Мне нравится
Реакции: IgorekBeast

IgorekBeast

Новичок
Пользователь
Апр 28, 2021
5
0
1
Python:
a = 1
c == False
while c == False:
    if a % 2 == 0:
        if a % 3 == 0:
            if a % 4 == 0:
                if a % 5 == 0:
                    if a % 6 == 0:
                        if a % 7 == 0:
                            if a % 8 == 0:
                                if a % 9 == 0:
                                    if a % 10 == 0:
                                        if a % 11 == 0:
                                            if a % 12 == 0:
                                                if a % 13 == 0:
                                                    if a % 14 == 0:
                                                        if a % 15 == 0:
                                                            if a % 16 == 0:
                                                                if a % 17 == 0:
                                                                    if a % 18 == 0:
                                                                        if a % 19 == 0:
                                                                            if a % 20 == 0:
                                                                                print('Ура, число найдено!')
                                                                                print(a)
                                                                                c == True
                                                                            else:
                                                                                a =+ 1
                                                                        else:
                                                                            a =+ 1
                                                                    else:
                                                                        a =+ 1
                                                                else:
                                                                    a =+ 1
                                                            else:
                                                                a =+ 1
                                                        else:
                                                            a =+ 1
                                                    else:
                                                        a =+ 1
                                                else:
                                                    a =+ 1
                                            else:
                                                a =+ 1
                                        else:
                                            a =+ 1
                                    else:
                                        a =+ 1
                                else:
                                    a =+ 1
                            else:
                                a =+ 1
                        else:
                            a =+ 1
                    else:
                        a =+ 1
                else:
                    a =+ 1
            else:
                a =+ 1
        else:
            a =+ 1   
    else:
        a =+ 1
 

Ципихович Эндрю

Новичок
Пользователь
Мар 27, 2021
66
2
8
тушите свет, почитайте как это безобразие заменить с помощью or
Код:
    if a % 2 == 0:
        if a % 3 == 0:
            if a % 4 == 0:
                if a % 5 == 0:
                    if a % 6 == 0:
                        if a % 7 == 0:
                            if a % 8 == 0:
                                if a % 9 == 0:
                                    if a % 10 == 0:
                                        if a % 11 == 0:
                                            if a % 12 == 0:
                                                if a % 13 == 0:
                                                    if a % 14 == 0:
                                                        if a % 15 == 0:
                                                            if a % 16 == 0:
                                                                if a % 17 == 0:
                                                                    if a % 18 == 0:
                                                                        if a % 19 == 0:
                                                                            if a % 20 == 0:
а вообще тут улучшений можно сделать много, и это else: a =+ 1 должно быть одно
 

Vershitel_sudeb

Пользователь
Пользователь
Мар 17, 2021
42
9
8
Python:
c = 0
nex = True
while nex:   
    c += 2
    nex = False
    for i in range(2, 21):
        if c % i != 0:
            nex = True
            break
print(c)
Скажу сразу - минимальное число 232 792 560, и программа ищет его ОЧЕНЬ долго
 

Ципихович Эндрю

Новичок
Пользователь
Мар 27, 2021
66
2
8
почитайте как это безобразие заменить с помощью or
ошибся я с and нужно, но другой юзер выложил уже решение с учётом
тут улучшений можно сделать много
 

IgorekBeast

Новичок
Пользователь
Апр 28, 2021
5
0
1
Спасибо, за or знаю, просто использовал его только раз, поэтому забыл о нём(не привык еще)
 

Ципихович Эндрю

Новичок
Пользователь
Мар 27, 2021
66
2
8
я понимаю, что это задача на изучение Питона, а так наверное для её решения есть формула, во всяком случае глупо проверять на делимость на 2-а, если оно делится на 4-ре, и таких глупостей как я понимаю не одна........
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 184
532
113
Пытаюсь создать программу, которая высчитает наименьшее число, которое делится на все числа от 2 до 20
Это задача на поиск НОК (наименьшего общего кратного) и решать ее перебором долго.
Алгоритм решения должен быть примерно такой:
1. Получаем список простых множителей для каждого числа.
2. Объединяем эти множители в общий список.
3. Перемножаем все множители из полученного списка.

Вот пример:
Python:
def Factor(n):
    """Разложение числа на простые множители"""
    Ans = []
    d = 2
    while d * d <= n:
        if n % d == 0:
            Ans.append(d)
            n //= d
        else:
            d += 1
    if n > 1:
        Ans.append(n)
    return Ans


# получаем из чисел списки множителей
s = []
for i in range(2, 21):
    s.append(Factor(i))

# собираем все множители в один список (от меньшего к большему)
for i, _ in enumerate(s):
    for j in s[i]:
        if s[i].count(j) > s[0].count(j):
            s[0].append(j)

# выводим его в консоль
print(s[0])
# перемножаем множители из общего списка
x = 1
for i in s[0]:
    x *= i
# выводим результат в консоль
print(x)
# проверка
for i in range(2, 21):
    print(x, '/', i, '=', x / i)
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов