Уведомления

Группа в Telegram: @pythonsu

#1 Июль 19, 2017 14:24:53

krok64
Зарегистрирован: 2017-04-04
Сообщения: 75
Репутация: +  11  -
Профиль   Отправить e-mail  

Вопросы от новичков.

citizen404
FileNotFoundError: No such file or directory:
пробовал переводить? файл не найден.

Офлайн

#2 Июль 20, 2017 21:42:42

Myriam
Зарегистрирован: 2017-07-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы от новичков.

Здравствуйте!
Изучаю Пайтон, не могу понять замыкания. Пример:

 def make_adder(x):
    def adder(n):
        return x + n #захват переменной "x" из внешнего контекста
    return adder
f = make_adder(10)
print f(5) # 15
print f(-1) # 9
Итак, ряд вопросов:
1) Замыкание сохраняет результат работы для последующего использования. Куда сохраняет и в виде чего?
2) Какое значение пойдет в качестве аргумента функции adder? То, которое в скобках при вызове функции f(5), f(-1)? Или 10?
3) Какое применение у замыканий? Какие задачи они решают?
Если не сложно вам, простым человеческим языком, так как в инете сложнообобщенные описания, которые сложно понять.
Заранее спасибо!

Отредактировано Myriam (Июль 20, 2017 21:44:41)

Офлайн

#3 Июль 21, 2017 05:50:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопросы от новичков.

Myriam
Куда сохраняет и в виде чего?
В питоне всё есть объект, даже функция, даже класс. Вероятно, значения захваченные из контекста сохраняются в виде атрибутов объекта.
Myriam
Какое значение пойдет в качестве аргумента функции adder? То, которое в скобках при вызове функции f(5), f(-1)? Или 10?

У вас две разные функции. 10 вы передаете в make_adder, а 5 и -1 в adder. adder в данном случае - результат работы make_adder. Просто отвыкните от того, что функции (а так же классы и объекты) это нечто статическое раз и навсегда заданное в коде. Функцию можно создать динамически, что ваш пример и демонстрирует: функция adder создается каждый вызов make_adder и каждый результат дает другую функцию с другим “телом”.
Myriam
Какое применение у замыканий? Какие задачи они решают?
Любые синтаксические конструкции решают одну задачу - уменьшение сложности алгоритмирования. Типичное применение замыканий в питоне - декораторы.



Офлайн

#4 Июль 21, 2017 16:18:36

ispylnev
Зарегистрирован: 2017-06-22
Сообщения: 12
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопросы от новичков.

FishHook
Типичное применение замыканий в питоне - декораторы.
Подскажите,пожалуйста,а на вашей на практике декораторы вложенные друг в друга часто встречались?

Отредактировано ispylnev (Июль 21, 2017 16:19:17)

Офлайн

#5 Июль 21, 2017 23:23:04

Myriam
Зарегистрирован: 2017-07-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы от новичков.

Выполняла задачу:
Написать реализацию вычисления числа Фибоначчи через рекурсию с подсчетом количества произведенных вызовов функции. Подсчет количества вызовов функции реализовать через замыкание.

FishHook
i = int(input('Введите количество сумм'))
def Fibonacci(n):
count = n
def Fib(m):
k = 0
nonlocal count
count+=1
if m > 2:
k = Fib(m - 1) + Fib(m - 2)
else:
k = 1
return k
print(count)
return Fib
F = Fibonacci(0)
print(F(i))
Если я правильно поняла замыкания, то в этом примере функции Fibonacci будет задаваться аргумент 0, который будет увеличиваться на 1 в подфункции Fib. А сама подфункция Fib получит значение i в качестве аргумента и вычислит число Фибоначчи. Вот только где тут ошибка: не производится подсчет количества вызовов функции?

Офлайн

#6 Июль 22, 2017 14:21:07

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Вопросы от новичков.

Myriam
не производится подсчет количества вызовов функции?

Количество вызовов подсчитывается, только не возвращается.

 def Fibonacci(n):
    count = n
    def Fib(m):
        k = 0
        nonlocal count
        count+=1
        if m > 2:
            k = Fib(m - 1) + Fib(m - 2)
        else:
            k = 1
        Fib.count = count
        return k
    print(count)
    return Fib
F = Fibonacci(0)
F(3)
F.count # 3

Офлайн

#7 Июль 24, 2017 10:28:48

Daler_68
Зарегистрирован: 2017-07-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы от новичков.

Доброго дня.
Только начинаю знакомство с Python.
При запуске - ошибка “invalid syntax” и подсвечивает “while”. Не могу понять в чем проблема, помогите, пожалуйста, разобраться (код ниже). Что не было учтено?
Как я понимаю алгоритм программы:
- задали отчет попыток отгадывания/ задали число
- цикл будет выполняться и мы его прервем, при условии, что заданное число будет совпадать со случайно выбранным из (1, 100)
- напечатаем результаты
- выйдем из игры

 #игрок загадывает натуральное число от 1 до 100, а компьютер отгадывает
import random
c = 1 #кол-во попыток компьютера отгадать число
a = int (input('Загадай число: ') #число загаданное пользователем
while True:
    d = random.randint(1, 100) #варианты ответа от компьютера
    c += 1
    if a == d:
         print('Компьютур угадал c', c, 'попытки! Правильный ответ', d)
         break
input ('\n\nНажмите Enter, чтобы выйти')

Отредактировано Daler_68 (Июль 24, 2017 10:40:14)

Офлайн

#8 Июль 24, 2017 10:30:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопросы от новичков.

Daler_68

 [code python][/code]



Офлайн

#9 Июль 24, 2017 10:31:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопросы от новичков.

 a = int (input('Загадай число: ')
скобку кто будет закрывать?



Офлайн

#10 Июль 24, 2017 10:52:39

Daler_68
Зарегистрирован: 2017-07-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы от новичков.

FishHook
  a = int (input('Загадай число: ')
скобку кто будет закрывать?
Спасибо! Осознал, исправился, переписал!

Отредактировано Daler_68 (Июль 24, 2017 10:57:26)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version