2017-11-17 100 views
-6

我需要在多選題測驗中加分。添加多選題分數

這是我的代碼:

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

我已經試驗了一下你的代碼,這個問題似乎在別處。出於某種原因,腳本總是比較nexT中if的錯誤答案。其他時候,在重新啓動腳本而不清除舊變量之後,它總是認爲答案是正確的。

我想這個問題可能會消失,如果你清理你的代碼了一下。我建議你將代碼重寫爲一個類,這是Tkinter腳本的常用方法。你的主要優點是:

  • 這是一個很大更具可讀性(這將是更容易調試)
  • 沒有更多的全局變量,而不是你只是參考變量作爲類(個體經營的一部分。變量)
  • 當程序退出時(目前似乎沒有正確執行),您可以使用del MyClass之類的東西來完成擺脫變量混亂的任務。這種混亂可能是爲什麼這個bug的行爲不時發生變化。

看一看這個線程有關構建基於類的應用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