Функция, использующая графику черепахи, вызывающая ошибки - PullRequest
0 голосов
/ 28 февраля 2020

Я должен был создать код python, чтобы взять элементы в списке и превратить их в гистограмму. В моем коде у меня есть метод create graph, который работает при первом запуске моего кода, но затем, когда я решаю ввести другой набор данных, это вызывает ошибки, в частности, когда через некоторое время вызывается creategraph l oop .

def creategraph():
bar = turtle.Turtle()
bar.speed(100)
bar.color("black")
bar.fillcolor("green")
bar.pensize(3)
bar.setposition(-200, 0)

xs = [top(text), eighties(text), seventies(text), sixties(text), belowsixties(text)]
#creates list withthe heights ^^

for i in xs:
    draw_bar(bar, i)
bar.penup()
bar.setposition(-200, -50)
bar.forward(40)
bar.write(str("90s"))
bar.forward(40)
bar.forward(40)
bar.write(str("80s"))
bar.forward(40)
bar.forward(40)
bar.write(str("70s"))
bar.forward(40)
bar.forward(40)
bar.write(str("60s"))
bar.forward(40)
bar.forward(40)
bar.write(str("<60"))
bar.forward(40)

bar.hideturtle()

turtle.done()

это заставляет меня получать сообщения об ошибках вроде этого:

exception was: 
    Traceback (most recent call last):
  File "C:\Users\bwoo2\OneDrive\Desktop\CS\Python\__Project2_ScoreAnalysis_Bwoo.py", line 160, in <module>
    creategraph()
  File "C:\Users\bwoo2\OneDrive\Desktop\CS\Python\__Project2_ScoreAnalysis_Bwoo.py", line 102, in creategraph
    bar = turtle.Turtle()
  File "C:\Users\bwoo2\AppData\Local\Programs\Thonny\lib\turtle.py", line 3816, in __init__
    visible=visible)
  File "C:\Users\bwoo2\AppData\Local\Programs\Thonny\lib\turtle.py", line 2557, in __init__
    self._update()
  File "C:\Users\bwoo2\AppData\Local\Programs\Thonny\lib\turtle.py", line 2660, in _update
    self._update_data()
  File "C:\Users\bwoo2\AppData\Local\Programs\Thonny\lib\turtle.py", line 2646, in _update_data
    self.screen._incrementudc()
  File "C:\Users\bwoo2\AppData\Local\Programs\Thonny\lib\turtle.py", line 1292, in _incrementudc
    raise Terminator
turtle.Terminator

и мой l oop, который вызывает график, равен

codebreaker = 0

, в то время как codebreaker == 0: breaker = False

text = input("Please enter the file name: ")
f = open(text)

lineList = [line.rstrip('\n') for line in f]

f.close()

text = lineList

print("Results for", text[0])
print("Number of scores:", findscores(text))
print("High score:", findmax(text))
print("Low score:", findmin(text))
print("Avg:", findavg(text))
print("Check other screen for graph of data")
print("Make sure to close out of graph before processing another file")
creategraph()
print("")
y_n = input("Process another file? y/n :")


if y_n == "y":
    breaker = False
elif y_n == "n":
    breaker = True

if breaker == True:
    codebreaker = 1

Есть идеи, что не так с функцией creategraph?

1 Ответ

0 голосов
/ 28 февраля 2020

Ваша основная проблема заключается в том, что функция turtle.done() должна вызываться только один раз , когда вы передаете управление обработчику событий и все дальнейшее взаимодействие с кодом будет происходить через события (мышь щелчки, нажатия клавиш и т. д. c.) Если вы звоните creategraph() несколько раз, то turtle.done() не будет вызываться из него.

Ваша вторичная проблема заключается в том, что вы пытаетесь объединить консоль вход с событиями черепахи. Вы действительно должны использовать только модель событий черепахи. То есть вместо input() вы должны использовать метод черепахи textinput() для вызова диалогового окна, основанного на событии (т. Е. Нажатием псевдо-кнопки «новые данные»).

...