Я пытаюсь получить следующий код, чтобы сделать несколько больше трюков:Tweaking функции в Python
class App(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
self.create_widgets()
def create_widgets(self):
self.answerLabel = Label(self, text="Output List:")
self.answerLabel.grid(row=2, column=1, sticky=W)
def psiFunction(self):
j = int(self.indexEntry.get())
valueList = list(self.listEntry.get())
x = map(int, valueList)
if x[0] != 0:
x.insert(0, 0)
rtn = []
for n2 in range(0, len(x) * j - 2):
n = n2/j
r = n2 - n * j
rtn.append(j * x[n] + r * (x[n + 1] - x[n]))
self.answer = Label(self, text=rtn)
self.answer.grid(row=2, column=2, sticky=W)
if __name__ == "__main__":
root = Tk()
В частности, я пытаюсь заставить его вычислить LEN (х) * J - 1 членов , и работать для различных значений параметров. Если вы попробуете запустить его, вы обнаружите, что вы получите ошибки для больших значений параметров. Например, с помощью списка 0,1,2,3,4 и параметра j = 3 мы должны запустить программу и получить. Однако я получаю сообщение об ошибке, что последнее значение «вне диапазона», если я пытаюсь вычислите его.
Я считаю, что это проблема с моей функцией, как определено. Похоже, что проблема с параметрами имеет какое-то отношение к тому, как он связывает параметр с значением n. Рассмотрим 0123. Он отлично работает, если я использую 2 в качестве моего параметра (так называемый индекс в функции), но терпит неудачу, если я использую 3.
EDIT:
def psi_j(x, j):
rtn = []
for n2 in range(0, len(x) * j - 2):
n = n2/j
r = n2 - n * j
if r == 0:
rtn.append(j * x[n])
else:
rtn.append(j * x[n] + r * (x[n + 1] - x[n]))
print 'n2 =', n2, ': n =', n, ' r =' , r, ' rtn =', rtn
return rtn
Например, если мы имеем psi_j (х, 2) с x = [0,1,2,3,4], мы сможем получить [0,1,2,3,4,5,6,7,8,9,10,11] с ошибкой на 12.
Идея состоит в том, что мы должны уметь вычислить этот последний термин. Это 12-й член нашей выходной последовательности и 12 = 3 * 4 + 0 => 3 * x [4] + 0 * (x [n + 1] -x [n]). Теперь нет пятого термина для вычисления, поэтому это определенно проблема, но нам не нужен этот термин, так как вторая часть уравнения равна нулю. Есть ли способ записать это в уравнение? (? Это своего рода фильтр или сглаживая функцию)
Удалите ненужный код, например 'indexEntry'. Более короткий код легче читать и проще найти проблему. – FakeRainBrigand
@FakeRain Я также удалил некоторые строки self.entry. Я был обеспокоен тем, что удаление некоторых вещей может затмить эту идею. Если есть больше, вы считаете, что я могу удалить, сообщите мне, и я был бы рад сделать это. – 114
Может оказаться полезным, если вы распечатаете значения переменных во время прогона программы и сравните их с вашими ожиданиями. Также может быть полезно протестировать такие довольно сложные функции без чрезмерных затрат, например. г. графический интерфейс. – glglgl