Почему не работает код для рисования графиков?

Код взят с хабра(habrahabr.ru/post/163395), программа представляет собой примитивный рисовальщик графиков, написанный на Python 2.7.4, с использованием библиотеки Tkinter, для создания GUI. Должно происходить вычисление значения функции в каждой из 16000 точек, с последующим переносом на график.
Но не происходит. В чём ошибка?
from math import *
from Tkinter import *


f = raw_input('f(x):')

root = Tk()

canv = Canvas(root, width = 1000, height = 1000, bg = "white")
canv.create_line(500,1000,500,0,width=2,arrow=LAST) 
canv.create_line(0,500,1000,500,width=2,arrow=LAST)

First_x = -500;

for i in range(16000):
    if (i % 800 == 0):
        k = First_x + (1 / 16) * i
        canv.create_line(k + 500, -3 + 500, k + 500, 3 + 500, width = 0.5, fill = 'black')
        canv.create_text(k + 515, -10 + 500, text = str(k), fill="purple", font=("Helvectica", "10"))
        if (k != 0):
            canv.create_line(-3 + 500, k + 500, 3 + 500, k + 500, width = 0.5, fill = 'black')
            canv.create_text(20 + 500, k + 500, text = str(k), fill="purple", font=("Helvectica", "10"))
    try:
        x = First_x + (1 / 16) * i
        new_f = f.replace('x', str(x))
        y = -eval(new_f) + 500
        x += 500
        canv.create_oval(x, y, x + 1, y + 1, fill = 'black')
    except:
        pass
canv.pack()
root.mainloop()
  • Вопрос задан
  • 2766 просмотров
Решения вопроса 1
@throughtheether
human after all
>k = First_x + (1 / 16) * i

Это всегда равно First_x, потому что 1/16 всегда (python 2.7) дает результат 0. Исправьте на k = First_x + i/16

> x = First_x + (1 / 16) * i

Аналогично. Исправьте на x = First_x + i/16.

Отвечая на ваш вопрос, код не работает, потому что в python3.x (пример по ссылке) и python 2.x (ваш вариант) оператор / работает по-разному. Другой вариант решения проблемы, оставить код нетронутым, добавить лишь в начало строчку
from __future__ import division
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы