我的uni项目代码存在问题,尤其是在海龟模块部分。该程序显示学生标记,我们应该使用海龟模块显示条形图。我遇到的问题是,即使乌龟工作区出现,光标也不会移动以绘制条形图。
这是代码:
def menu():
allStudentsMarks = {}
while True:
userinput = input("Enter 1 to store student details \n"+
"Enter 2 to display student report \n"+
"Enter 3 to exit \n")
if userinput == "1":
enterMarks(allStudentsMarks)
elif userinput == "2":
displayReports(allStudentsMarks)
elif userinput == "3":
print("You have left the program. Thank you.")
break
def enterMarks(allStudentsMarks):
studentName = input("Please enter the student's name: ")
while True:
DFMarks = input("Please enter the marks from 0-20: ")
DFMarks = float(DFMarks)
if DFMarks >= 0 and DFMarks <= 20:
break
while True:
ProjectMarks = input("Please enter the marks from 0-30: ")
ProjectMarks = float(ProjectMarks)
if ProjectMarks >= 0 and ProjectMarks <= 30:
break
while True:
FinalMarks = input("Please enter the marks from 0-50: ")
FinalMarks = float(FinalMarks)
if FinalMarks >= 0 and FinalMarks <= 50:
break
marksList = [DFMarks, ProjectMarks, FinalMarks]
allStudentsMarks[studentName] = marksList
studentDetails = sum(marksList)
def getBelowAvgDFMarks(studentDetails):
marks = list(studentDetails.values())
dfTot = 0
dfLen = 0
for marksList in marks:
dfTot += marksList[0]
dfLen += 1
dfAvg = dfTot / dfLen
print("Displaying the student(s) whose DF marks are below the average of", dfAvg)
belowAvgDF = {}
for student in studentDetails:
if studentDetails[student][0] < dfAvg:
belowAvgDF[student] = studentDetails[student][0]
print(belowAvgDF)
return
def getBelowAvgProjectMarks(studentDetails):
marks = list(studentDetails.values())
projectTot = 0
projectLen = 0
for marksList in marks:
projectTot = projectTot + marksList[1]
projectLen = projectLen + 1
projectAvg = projectTot / projectLen
print("Displaying the student(s) whose project marks are below the average of", projectAvg)
belowAvgProject = {}
for student in studentDetails:
if studentDetails[student][1] < projectAvg:
belowAvgProject[student] = studentDetails[student][1]
print(belowAvgProject)
return
def getBelowAvgFinalExamMarks(studentDetails):
marks = list(studentDetails.values())
finalTot = 0
finalLen = 0
for marksList in marks:
finalTot = finalTot + marksList[2]
finalLen = finalLen + 1
finalAvg = finalTot / finalLen
print("Displaying the student(s) whose final marks are below the average of", finalAvg)
belowAvgFinal = {}
for student in studentDetails:
if studentDetails[student][2] < finalAvg:
belowAvgFinal[student] = studentDetails[student][2]
print(belowAvgFinal)
return
def getBelowAvgOverallMarks(studentDetails):
marks = list(studentDetails.values())
overall = 0
overallLen = len(marks)
for marksList in marks:
for num in marksList:
overall += num
overallAvg = overall / overallLen
print(overallAvg)
print("Displaying the student(s) whose overall marks are below the average of", overallAvg)
belowAvgOverall = {}
for student in studentDetails:
if sum(studentDetails[student]) < overallAvg:
belowAvgOverall[student] = sum(studentDetails[student])
print(belowAvgOverall)
return
def getTotalMarks(studentDetails):
total = []
marks = list(studentDetails.values())
total = 0
for i in marks:
for num in i:
total = total + num
print(total)
total = 0
import turtle
wn = turtle.Screen()
turtle = turtle.Turtle()
turtle.color("blue", "lightblue")
for marks in range(total):
turtle.begin_fill()
turtle.forward(10)
turtle.left(90)
turtle.forward(marks)
turtle.left(90)
turtle.forward(10)
turtle.left(90)
turtle.forward(marks)
turtle.left(90)
turtle.end_fill()
turtle.forward(20)
wn.exitonclick()
def displayReports(allStudentsDetails):
userinput = input("Enter 1 to get the average DF report marks \n"+
"Enter 2 to get the average project report marks \n"+
"Enter 3 to get the average final exam marks \n"+
"Enter 4 to get the overall marks \n"+
"Enter 5 to get the selected student marks \n"+
"Enter 6 to get the bar chart of the total marks \n")
if userinput == "1":
getBelowAvgDFMarks(allStudentsDetails)
elif userinput == "2":
getBelowAvgProjectMarks(allStudentsDetails)
elif userinput == "3":
getBelowAvgFinalExamMarks(allStudentsDetails)
elif userinput == "4":
getBelowAvgOverallMarks(allStudentsDetails)
elif userinput == "5":
displaySelectedStudentsMarks(allStudentsDetails)
elif userinput == "6":
getTotalMarks(allStudentsDetails)
return
def displaySelectedStudentsMarks(selectedStudentsDetails):
for studentNameKey in selectedStudentsDetails:
displayAStudentsDetail(studentNameKey, selectedStudentsDetails[studentNameKey])
def displayAStudentsDetail(studentName, studentMarkList):
print("Student name: ", studentName)
print("DF marks: ", studentMarkList[0], "\tProject marks: ", studentMarkList[1], "\tFinal exam: ", studentMarkList[2], "\tTotal marks: ", sum(studentMarkList))
menu()
当您输入值&#39; 6&#39; (&#34;得到总分的条形图&#34;),在第二级&#34;显示学生报告&#34;菜单,它应该能够显示每个学生的总考试价值的条形图。
谢谢。
答案 0 :(得分:0)
我相信你的getTotalMarks()
一团糟。不仅仅是乌龟,而是Python智慧。一个线索是你有两个不同的变量同名:
total = []
marks = list(studentDetails.values())
total = 0
我要建议三个改变。首先,以这种方式导入龟:
from turtle import Turtle, Screen
其次,以这种方式启动menu()
例程:
wn = Screen()
menu()
wn.exitonclick()
即。不要将exitonclick()
放在函数中,使其成为代码执行的最后一件事。最后,用这个重写替换getTotalMarks()
:
def getTotalMarks(studentDetails):
totals = [sum(scores) for scores in studentDetails.values()]
turtle = Turtle()
turtle.color("blue", "lightblue")
for total in totals:
turtle.begin_fill()
turtle.forward(10)
turtle.left(90)
turtle.forward(total)
turtle.left(90)
turtle.forward(10)
turtle.left(90)
turtle.forward(total)
turtle.left(90)
turtle.end_fill()
turtle.forward(20)
这没什么特别的,但它应该让你前进。