Russian subtitles

← 02ps-04 Процедура proc() (Решение)

Get Embed Code
6 Languages

Showing Revision 2 created 08/01/2014 by Fran Ontanaya.

  1. Чтобы справиться с этим заданием, вам нужно иметь хорошее понимание того,
  2. как работает функция proc().
  3. Давайте рассмотрим два случая, во всей полноте иллюстрирующие поведение функции.
  4. У нее 2 входных значения, но результат зависит только от значения a.
  5. Точнее, от результата вызова функции test(a).
  6. Если test(a) истинно, то мы возвращаем второй параметр b.
  7. Если test(a) ложно, то возвращаем первый параметр a.
  8. Именно на такое поведение нам нужно проверить каждую из этих функций. Давайте приступим.
  9. В proc1() мы возвращаем y, если test(x) истинно (x – первый параметр).
  10. Это соответствует поведению первоначальной функции.
  11. Если результат test(первый параметр) равен True, то мы возвращаем второй параметр, как и в proc1().
  12. Если же этот результат равен False, мы возвращаем первый параметр x.
  13. Случай, когда test(x) ложно, эквивалентен случаю, когда ложно test(a),
  14. и в обоих случаях мы возвращаем a и x соответственно,
  15. которые представляют собой разные имена одной и той же переменной в данной функции.
  16. Эти процедуры эквивалентны.
  17. Давайте рассмотрим вторую функцию – proc2().
  18. Заметьте, что здесь проверяется значение b.
  19. Мы знаем, что этот вариант не может быть эквивалентен нашей исходной функции,
  20. результат которой не зависит от значения b.
  21. Мы можем сходу определить, что этот вариант неверен. Данная функция не эквивалентна исходной.
  22. Посмотрим на proc3().
  23. Здесь структура немножко отличается, но давайте проследим ее выполнение для обоих случаев.
  24. В случае, если test(a) истинно, мы присваиваем result значение b и возвращаем result.
  25. Как и в исходной функции, здесь мы возвращаем b, если test(a) истинно.
  26. Если test(a) ложно, мы просто возвращаем result, которой до этого было присвоено значение a.
  27. То есть логика процедуры такова: если test(a) [ложно], то мы возвращаем a.
  28. Это поведение совпадает с поведением исходной функции.
  29. Значит, этот вариант эквивалентен proc().
  30. Осталась последняя функция – proc4().
  31. Здесь вас может сбить с толку строка 'udacity' в кавычках, которой нет
  32. в остальных функциях, но и здесь нам важно проследить выполнение кода.
  33. Если test(a) истинно, то выражение not test(a) ложно,
  34. и мы возвращаем b.
  35. Если test(a) истинно, мы возвращаем b.
  36. Это поведение соответствует определению исходной функции.
  37. Если test(a) ложно, то not test(a) истинно,
  38. и мы присваиваем b значение 'udacity', но затем возвращаем a.
  39. Если test(a) ложно, то мы изменяем значение b,
  40. но больше ничего с ним не делаем, а просто возвращаем a.
  41. Результат совпадает с результатом исходной функции proc().