Форум сайта python.su
Помогите, пожалуйста , разобраться .
Почему в коде для вычисления суммы цифр числа:
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)
Офлайн
>>> 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 >>>
Офлайн
Спасибо за объяснение, но я до конца не понял , почему в 1-м коде с циклом while n не видно в глобальной видимости . Простите за тупость, я только начинаю осваивать язык. )
Офлайн
Сформулирую точнее - почему в одном случае -(вариант с циклом for) можно использовать функцию без параметра, а с while - обязательно нужен параметр ?
Офлайн
dmitry1959Если ты создаёшь переменную в локальной области видимости, то эта переменная перекрывает собой переменную в глобальной области видимости.
но я до конца не понял , почему в 1-м коде с циклом while n не видно в глобальной видимости
dmitry1959Если ты везде сделаешь только циклы for, они все (оба) будут работать так.
почему в одном случае -(вариант с циклом for) можно использовать функцию без параметра, а с while - обязательно нужен параметр ?
Офлайн
Спасибо Вам большое за отклик! Сейчас буду разбираться. Тогда можете сказать, как будет выглядеть аналогичный код с while с функцией без параметра ? Заранее спасибо !)
Офлайн
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 >>>
Отредактировано py.user.next (Май 3, 2023 01:23:17)
Офлайн
настоятельно рекомендую перестать играть в поле чудес и почитать Марка Лутца
Офлайн
Не работает :
C:\Users\Дмитрий\PycharmProjects\Study\venv\Scripts\python.exe C:\Users\Дмитрий\PycharmProjects\Study\test1.py
45
4
9
Офлайн
И если print и i поменять местами - то же самое …
Офлайн