2012-01-18 4 views
3

ОК, наш профессор объяснил (вроде) эту проблему, но это все еще не имеет большого смысла.Python Домашнее задание - не имеет смысла

Вопрос: Выполнить функцию knice(f,a,b,k), которая будет возвращать 1, если для некоторого целого a <= x <= b и некоторого целого n <= k, п применений f на х будет х, (например) и 0, если нет.

Что при условии, что профессор был:

def knice(f,a,b,k): 
    f(f(f(...(f(x)))) = x 
    for i = a to b: 
     y = f(i) 
     if y = i break 
    for j = z to k: 
     y = f(y) 
     if y = i break 

Лично, этот пример не имеет смысла для меня, так хочет видеть, могу ли я получить разъяснение.

OP EDIT 1/19/2012 3:03 вечера CST

Это последняя функция, которая была выяснял с помощью GTA:

def f(x): 
    return 2*x-3 

def knice(f,a,b,k): 
x = a 
while x <= b: 
    n = 1 
    y = f(x) 
    if y == x: 
     return 1 
    while n <= k: 
     y = f(y) 
     n=n+1 
     if y == x: 
      return 1 
    x=x+1 
return 0 
+0

Я думаю, что отступы немного отключаются, второй цикл 'for' должен быть внутри первого. Кроме того, что такое 'z'? И, наконец, от этой функции нет никакого возврата. Является ли этот пример только отправной точкой или он предназначен для работы? –

+0

В этом проблема. Профессор не уточнил, что означает какой-либо из примеров, и он объяснил это классу 40, потому что НИКТО не знал, что делать. Я честно не мог сказать, было ли это z или 2! – seiryuu10

+2

Хорошо, тогда считайте это нерабочей отправной точкой. С некоторой перестановкой и небольшими изменениями вы можете заставить эту функцию работать. –

ответ

5

Игнорировать его код; вы должны написать все, что вам будет удобно, и выработать изломы позже.

Вы хотите работать ли

  • f(a) = a или f(f(a)) = a, или ..., или f^n(a) = a, или,
  • f(a+1) = a+1 или f(f(a+1)) = a+1, или ..., или f^n(a+1) = a+1, или,
  • ...
  • f(b) = b, или f(f(b)) = b, или ..., или f^n(b) = b.

Очевидный алгоритм должен сразу приходить в голову: попробуйте все эти значения один за другим! Вам понадобятся две (вложенные) петли, потому что вы повторяете прямоугольник значений. Можете ли вы теперь посмотреть, что делать?

+0

Я действительно вижу это, но он пытается закодировать его, с которым у меня возникают проблемы. У меня не было никакого формального или иного опыта работы с Python, и это было «здесь вы идете, включите его в установленный срок». – seiryuu10

4

Да, я могу понять, почему это может ввести в заблуждение.

Было f(f(f(...(f(x)))) = x завернуто в тройной двойные кавычки? Это строка документации по функциям, вроде комментирования вашего кода. Он не должен был быть автономным, не защищая его.

Представьте, что f был вызван increment_by_one.

Вызов increment_by_one 10 раз, как, что на й 2 не даст 12. Независимо от того, сколько раз вы увеличиваете, вы никогда не кажетесь, чтобы получить назад 2.

Теперь представьте себе, е назывались multiply_by_one.

Вызов multiply_by_one 5 раз, как на х из 3 даст 3. Сладкий.

Итак, несколько примеров выходов вы можете протестировать (вы должны написать функции)

knice(increment_by_one, 1, 3, 5) возвратит 0.

knice(multiply_by_one, 1, 3, 5) вернется 1.

В качестве другого намека, отступы важно в python.

+0

Вы действительно прояснили это. Кодекс профессора почти не имеет смысла. – Droogans

+0

@Droogans: Он должен быть близок (по структуре) к окончательному ответу. Синтаксис на самом деле не является питоном, «переменные» в коде являются заполнителями для заполнения и т. Д. Если вы все-таки выясните ответ, вы можете найти больше сходства, чем различия в коде профессора (вот что Грег второй комментарий был о). Трюк заключался в понимании сложных целей функции в первую очередь. Если у вас есть ручка, удачи. – ccoakley

+0

Извините, что нажали на эту проблему, но, увидев другого профессионала, лечит новичков таким образом, заставляет меня задаться вопросом, получают ли они свой бонус от того, чтобы выпустить их из программы CS. Если бы я был на лекции, у меня могло бы быть другое мнение о «примере», опубликованном здесь. ':)' – Droogans

0

Вот конкретный пример. Начните с малого, и предположим, вы вызвали knice(f, a=1, b=2, k=1). Для k==1 нам не нужно беспокоиться об итерации функции. Единственными значениями x для рассмотрения являются 1 и 2, поэтому knice может вернуть 1 (т. Е. True), если f(1)==1 или f(2)==2.

Теперь предположим, что вы позвонили knice(f, a=1, b=2, k=2). Вам нужно будет проверить f(f(1)) и f(f(2)).

Поскольку k становится больше, вам нужно позвонить по телефону f. И поскольку диапазон между a и b увеличивается, вам нужно попробовать больше значений x в качестве аргумента для f.

Смежные вопросы