dmitry1959
Май 1, 2023 13:56:44
Помогите, пожалуйста , разобраться .
Почему в коде для вычисления суммы цифр числа:
def sum_digits(n):
result = 0
while n > 0:
result += n % 10
n //= 10
return result
n = int(input())
print(sum_digits(n))
имя параметра обязательно должно совпадать с именем переменной (n) иначе возникает ошибка, а в аналогичном коде, только с использованием цикла for :
def print_digit_sum(num):
sm = 0
for i in str(n):
sm += int(i)
print(sm)
n = int(input())
print_digit_sum(n)
имя параметра может быть любым (в данном случае num), отличным от имени переменной (n)
py.user.next
Май 1, 2023 14:16:37
>>> def sum_digits(n):
... result = 0
... while n > 0:
... result += n % 10
... n //= 10
... return result
...
>>>
>>> num = int(input())
12345
>>> print(sum_digits(num))
15
>>>
dmitry1959
а в аналогичном коде, только с использованием цикла for :
имя параметра может быть любым (в данном случае num), отличным от имени переменной (n)
Потому что оно в функции вообще не используется.
Вот я его убрал вообще и всё работает без него
>>> def print_digit_sum():
... sm = 0
... for i in str(n):
... sm += int(i)
... print(sm)
...
>>> n = int(input())
12345
>>> print_digit_sum()
1
3
6
10
15
>>>
Переменную n он видит в глобальной области видимости.
dmitry1959
Май 3, 2023 00:02:30
Спасибо за объяснение, но я до конца не понял , почему в 1-м коде с циклом while n не видно в глобальной видимости . Простите за тупость, я только начинаю осваивать язык. )
dmitry1959
Май 3, 2023 00:20:21
Сформулирую точнее - почему в одном случае -(вариант с циклом for) можно использовать функцию без параметра, а с while - обязательно нужен параметр ?
py.user.next
Май 3, 2023 00:29:49
dmitry1959
но я до конца не понял , почему в 1-м коде с циклом while n не видно в глобальной видимости
Если ты создаёшь переменную в локальной области видимости, то эта переменная перекрывает собой переменную в глобальной области видимости.
dmitry1959
почему в одном случае -(вариант с циклом for) можно использовать функцию без параметра, а с while - обязательно нужен параметр ?
Если ты везде сделаешь только циклы for, они все (оба) будут работать так.
Если ты везде сделаешь циклы while, они все (оба) будут работать так.
От разновидности цикла ничего не зависит. Это ты запутался просто.
dmitry1959
Май 3, 2023 00:47:50
Спасибо Вам большое за отклик! Сейчас буду разбираться. Тогда можете сказать, как будет выглядеть аналогичный код с while с функцией без параметра ? Заранее спасибо !)
py.user.next
Май 3, 2023 01:22:42
dmitry1959
как будет выглядеть аналогичный код с while с функцией без параметра ?
>>> def print_digit_sum():
... sm = 0
... i = 0
... num = str(n)
... while i < len(num):
... sm += int(num[i])
... print(sm)
... i += 1
...
>>> n = int(input())
12345
>>> print_digit_sum()
1
3
6
10
15
>>>
ZerG
Май 3, 2023 11:36:40
настоятельно рекомендую перестать играть в поле чудес и почитать Марка Лутца
dmitry1959
Май 3, 2023 12:19:47
Не работает :
C:\Users\Дмитрий\PycharmProjects\Study\venv\Scripts\python.exe C:\Users\Дмитрий\PycharmProjects\Study\test1.py
45
4
9
dmitry1959
Май 3, 2023 12:22:29
И если print и i поменять местами - то же самое …