2015-04-22 72 views
-1

當用戶提交他們的答案和它的錯誤時,def用戶輸入第一個錯誤並將錯誤從0更改爲1時,getResult()應該使「錯誤」變量增加1.之後,當用戶輸入錯誤的答案,變量仍然以「1」結尾。當用戶錯誤時,有沒有辦法讓它始終增加?爲什麼我的變量在一次後不增加?

from tkinter import * 
import random 
root = Tk() 

root.wm_title("HangMan") 

canvas = Canvas(root, height=400, width=800) 
canvas.pack() 
name = '' 

def titlescreen(): 
    title = canvas.create_text(400, 100, font=("Times New Roman", 50), tags="title") 
    canvas.itemconfig(title, text="HANGMAN: THE GAME") 

    startButton = Button(canvas, text="Start Game", width=10, command=startgame) 
    canvas.create_window(400, 200, window = startButton) 

    creditsButton = Button(canvas, text="Credits", width=10, command=displaycredits) 
    canvas.create_window(400, 250, window = creditsButton) 

def startgame(): 
    def getName(nameEntry): 
     global name 
     name = nameEntry.get() 
     print (name) 
     drawPole() 



    canvas.delete(ALL) 
    welcome = canvas.create_text(400,100,font=("Times New Roman",50),text="WELCOME!") 
    welcome2 = canvas.create_text(400,150,font=("Times New Roman", 30),text="PLEASE ENTER YOUR NAME") 


    nameEntry = Entry(canvas) 
    enterName = Button(canvas, text="Enter", width=10, command=lambda: getName(nameEntry)) 


    canvas.create_window(350, 200, window = nameEntry) 
    canvas.create_window(490, 200, window = enterName) 


    nameEntry.delete(0,END) 
    nameEntry.insert(0, "Enter Player Name") 


def displaycredits(): 
    canvas.delete(ALL) 
    created = canvas.create_text(400,100,font=("Times New Roman",50),text="CREATED BY") 
    credit1 = canvas.create_text(400,150,text="Patrick Tsui & Ricardo Perez") 
    credit2 = canvas.create_text(400,170,text="Montclair State University Students") 
    backButton = Button(canvas,text="Back to Title Screen",width=30,command=backtotitle) 
    canvas.create_window(400, 200, window=backButton) 

def backtotitle(): 
    canvas.delete(ALL) 
    titlescreen() 

def drawPole(): 
    canvas.delete(ALL) 
    a = canvas.create_rectangle(550,50,550,350,fill = "black") 
    b = canvas.create_rectangle(350,50,550,50,fill = "black") 
    c = canvas.create_rectangle(350,50,350,90,fill = "black") 
    gamePlay() 


def gamePlay(): 

    def getAnswer(): 
     global answer 
     answer = answer1.get() 
     print (answer) 

     getResult() 

    def getResult(): 
     global result2 
     global mistake 
     mistake = 0 
     result2 = result 

     if str(result2) == answer: 
      canvas.create_text(300, 375, text="Correct!",fill="green", tags="result") 
     else: 
      canvas.create_text(300, 375, text="Wrong!",fill="red", tags="result") 
      d = canvas.create_oval(325, 90, 375, 140, outline = "black") 
      mistake += 1 

     print (result2) 
     print (mistake) 
     Continue() 

    def Continue(): 
     canvas.delete("confirm")   
     continueButton = Button(canvas,text="Continue",width=10,command=gamePlay) 
     canvas.create_window(450, 350, window = continueButton, tags="continue") 


    canvas.delete("question") 
    canvas.delete("continue") 
    canvas.delete("result") 
    x = random.randint(1,100) 
    y = random.randint(1,100) 
    questions = random.randint(0,3) 

    answer1 = Entry(canvas) 
    confirmButton = Button(canvas,text="Confirm",width=10,command=getAnswer) 

    canvas.create_window(300, 350, window = answer1) 
    canvas.create_window(450, 350, window = confirmButton, tags="confirm") 

    answer1.delete(0,END) 
    answer1.insert(0, "Enter Your Answer") 

    if questions == 0: 
     result = x + y 
     question1= canvas.create_text(350, 300, text=("Add: " + str(x) + " + " + str(y)), tags="question") 


    if questions == 1: 
     result = x - y 
     question1= canvas.create_text(350, 300, text=("Subtract: " + str(x) + " - " + str(y)), tags="question") 


    if questions == 2: 
     result = x * y 
     question1= canvas.create_text(350, 300, text=("Multiply: " + str(x) + " * " + str(y)), tags="question") 


    if questions == 3: 
     result = x // y 
     question1= canvas.create_text(350, 300, text=("Divide: " + str(x) + "/" + str(y)), tags="question") 

titlescreen() 

root.mainloop() 
+0

我不明白;你在'getResult'函數中遞增之前立即將'錯誤'重置爲0。你如何期望它能超過1? – helmbert

+0

@helmbert,沒有'錯誤'變量,或者有嗎? – ForceBru

+0

@ForceBru,是的,'getResult'函數中有一個賦值(這是'gamePlay'的一個內部函數)。嗯,在代碼塊中的行號將有助於這樣的討論... :) – helmbert

回答

3

您先進口後宣佈mistake變量權:

mistake=0 

如果你不這樣做,都在你的函數mistake變量將是本地的。

+0

謝謝你的幫助!我改正了我的錯誤,現在可以使用了。 –

+0

@RicardoDesuPerez,歡迎您的光臨! – ForceBru

1

你的問題是在這裏:

def getResult(): 
     global result2 
     global mistake 
     mistake = 0 

您每次請求的結果的時候,你是錯誤的值重置爲0,這意味着它永遠只能得到遞增達1

機會在保持應用程序當前格式的同時,解決方案將是在其他地方聲明「錯誤」。就個人而言,我會把它放在gamePlay()之後,假設你想在用戶再次玩時重置用戶錯誤。另一種方法是在導入後進行,即使在發送新的gamePlay()請求時也會保持錯誤值。有很多方法可以解決這個問題,所以如果您有需要,請隨時發揮創意並尋求幫助。

+0

謝謝你的解釋:)我會確保不要再犯同樣的錯誤。 –

相關問題