2015-04-22 61 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

谢谢你的解释:)我会确保不要再犯同样的错误。 –

相关问题