@fastym

Подсчет максимального числа делителей?

Написал программу, которая должна вывести два числа на одной строке, разделенных пробелом: число с максимальной суммой делителей и сумму его делителей:

n = range(1, 11) # все делители
x = range(1, 11) # входны числа для проверки
top_number = 0
temp_del = []
top_sum_del = []
for i in x:
    temp_del.clear()
    for j in n:
        if i % j == 0:
            temp_del.append(j)
            if len(temp_del) > len(top_sum_del):
                top_number = i
                top_sum_del = temp_del

print(top_number)
print(top_sum_del)

Почему когда идет добавление числа в список (temp_del.append(j), то он так же обновляет переменную (top_sum_del)? Мимо условия...
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
Списки - изменяемые объекты. Поэтом, при присваивани другой переменной, списки нужно обязательно копировать. Либо с помощью модуля copy, либо через slice
first = []
second = []
first.append(1)

print(f'1) First: {first} Second: {second} ')

second = first

print(f'2) First: {first} Second: {second} ')<code></code>

first.append(2)

print(f'3) First: {first} Second: {second} ')


1) First: [1] Second: [] 
2) First: [1] Second: [1] 
3) First: [1, 2] Second: [1, 2] 

Process finished with exit code 0


А теперь скопируем

first = []
second = []
first.append(1)

print(f'1) First: {first} Second: {second} ')

second = first[:]

print(f'2) First: {first} Second: {second} ')

first.append(2)

print(f'3) First: {first} Second: {second} ')


1) First: [1] Second: [] 
2) First: [1] Second: [1] 
3) First: [1, 2] Second: [1] 

Process finished with exit code 0
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы