Найти - Пользователи
Полная версия: параметры и аргументы функции
Начало » Python для новичков » параметры и аргументы функции
1 2
dmitry1959
Помогите, пожалуйста , разобраться .
Почему в коде для вычисления суммы цифр числа:

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
  
>>> 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
Спасибо за объяснение, но я до конца не понял , почему в 1-м коде с циклом while n не видно в глобальной видимости . Простите за тупость, я только начинаю осваивать язык. )
dmitry1959
Сформулирую точнее - почему в одном случае -(вариант с циклом for) можно использовать функцию без параметра, а с while - обязательно нужен параметр ?
py.user.next
dmitry1959
но я до конца не понял , почему в 1-м коде с циклом while n не видно в глобальной видимости
Если ты создаёшь переменную в локальной области видимости, то эта переменная перекрывает собой переменную в глобальной области видимости.

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