我需要在多项选择测验中加分。
这是我的代码:
from tkinter import *
import time, os, random
global questions
questions = []
questions = ['''
What does ? equal to:
43+(5x(6)**8)/8-8+8 = ?
1) 10356
2) 1049803
3) 202367
4) 12742130
5) 343321
''',
'''
Find the range, the median, the mode and the mean:
>>> 232, 4343, 434, 232.4, 43, 5453, 434, 232, 645, 23.3, 53453.3, 434 <<<
1) 53410.3, 2943.5, 434, 5496.58
2) 53410.3, 5956, 434, 5453.28
3) 232, 43, 3452, 421, 642
4) 232, 43, 43, 434
5) 232, 5453, 645, 53453.3
''',
'''
In 2004, the minimum wage in Ontario was $7.15.
In 2008, it was $8.15. What is the rate of change?
1) $0.90
2) $3.98
3) $1.54
4) $0.40
5) $1.80
''',
'''
Find the value of n:
--------------------------------------
43n/2n x (99.99/9)x7 = 99.99n
--------------------------------------
1) n = 99.92
2) n = 12.43
3) n = 16.73
4) n = 104.4
5) n = 3.98
''',
'''
Which one is NOT a linear equation?
1) y = 54x*3
2) y = 23x*7
3) y = -x
4) All of the Above
5) None of the Above
''',
'''
What is the formula for finding the surface area for a sphere?
1) 4/3πr**3
2) πr**2
3) 2πrh + 2πr**2
4) πd
5) 4πr**2
''',
'''
Which variable represents the slope?
y = mx + c
1) y
2) m
3) x
4) c
5) None of the above
''',
'''
An isosceles triangle has the top angle of 6x
and a supplementary angle of a base angle is 21x. What are the
measures of the angles of isosceles triangle?
1) 22.5, 78.75, 78.75
2) 108.97, 35.52, 35.52
3) 76.8, 51.6, 51.6
4) 20, 20, 140
5) 43.6, 5.5, 98.53
''',
'''
A sphere fits inside a rectangular box of 6cm by 6cm by 7cm.
What is the greatest possible volume of the sphere?
1) 113.04 cm*2
2) 110.46 cm*3
3) 113.04 cm*3
4) 110.46 cm*2
5) 142.9 cm*3
''',
'''
If the area of an isosceles triangle is 196 cm**2
and the height is 19.6 cm, what would it's perimeter be?
1) 53.9 cm
2) 64 cm
3) 76 cm
4) 32.43 cm
5) 32.32 cm
'''
]
global answers
global picked
global userans
global ansRandOrder
global score
answers = ['2', '1', '4', '3', '5', '5', '2', '1', '3', '2']
picked = []
userans = []
ansRandOrder = []
score = 0
def nexT():
global userans
userans.append(e1.get())
print(userans)
print(ansRandOrder)
global score
global i
i = 0
if userans[i] == ansRandOrder[i]:
score += 1
i += 1
print(score)
self.destroy()
ques()
def ques():
global self
global e1
global ansRandOrder
global picked
self = Tk()
w = 500
h = 375
ws = self.winfo_screenwidth()
hs = self.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
self.geometry('%dx%d+%d+%d' % (w, h, x, y))
x = random.randint(0, 9)
while x in picked:
x = random.randint(0, 9)
picked.append(x)
ansRandOrder.append(answers[x])
Label(self, text = '\n').pack()
Label(self, text = questions[x]).pack()
e1 = Entry(self)
e1.pack()
Label(self, text = '\n').pack()
nex = Button(self, text = 'Next Question', command = nexT).pack()
self.mainloop()
ques()
结果始终为score = 0
。
如何正确添加分数?
答案 0 :(得分:0)
我已经对您的代码进行了一些实验,问题似乎在于其他地方。由于某种原因,脚本总是在nexT中比较if的错误答案。其他时候,在重新启动脚本而不清除旧变量之后,它总是认为答案是正确的。
我认为如果你稍微清理你的代码,这个问题可能就会消失。我建议您将代码重写为类,这是Tkinter脚本的常用方法。您的主要优势是:
看看这个帖子,了解一些关于构建基于tkinter类的应用程序的好例子和解释: Best way to structure a tkinter application
作为测验的示例,它可能如下所示:(非功能性)
class Quiz():
def __init__(self):
self.questions = []
self.WriteQuestions()
self.answers = ['2', '1', '4', '3', '5', '5', '2', '1', '3', '2']
self.picked = []
self.userans = []
self.ansRandOrder = []
self.score = 0
#"self." instead of "global"
# Any def inside this class can refer to self."variable" and use it or update it.
self.Question()
def WriteQuestions(self):
# All your questions here, just so they're out of the way.
def NextQuestion(self):
self.userans.append(e1.get())
self.i = 0
if self.userans[i] == ansRandOrder[i]:
self.score += 1
i += 1
print(self.score)
root.destroy() # You'll need to pick a name other than "self" for your tk window
self.Question()
# self is a reserved keyword for classes and shouldn't be used for anything other
# than telling a class that you're referring to one of its own variables or functions.
def Question(self):
# etc...
if __name__ == 'main':
# set up tkloop here
# create an instance of the Quiz class, e.g.
Qz = Quiz()
# finally, after the loop finishes:
del Qz # To get rid of the old variables