2015-07-10 351 views
0

我正在做一个Coursera的小项目,我可以运行我的代码的大部分部分。但是关于游戏match or not检查的关键部分存在错误。simplegui indentation error:SyntaxError:bad input('')

# implementation of card game - Memory 

import simplegui 
import random 

# helper function to initialize globals 
def new_game(): 
    global turns, state, pairs, cards 
    turns = 0 
    state = 0 
    pairs = [] 
    cards = range(9) * 2 
    random.shuffle(cards) 

# define event handlers 
def mouseclick(pos): 
    # add game state logic here 
    global turns, state, pairs 
    pointed = pos[0] // 50 
    if pointed in pairs: 
     pass 
    else: 
     if state == 0: 
      state = 1 
      pairs.append(pointed) 
     elif state == 1: 
      state = 2 
      turns += 1 
      label.set_text('Turns =' + str(turns)) 
      pairs.append(pointed) 
#    if cards[pairs[-2]] == cards[[pairs[-1]]: 
#     flag = True 
#    else: 
#     flag = False 
     else: 
      state = 1 
      if flag == False: 
       del pairs[-2:] 
      pairs.append(pointed) 

# cards are logically 50x100 pixels in size  
def draw(canvas): 
    for n in range(1, 16): 
     canvas.draw_line((n * 50, 0), (n * 50, 100), 1, 'Green') 

    for n in pairs: 
     canvas.draw_line((n * 50 + 25, 0), (n * 50 + 25, 100), 50, 'White') 

    for n in pairs: 
     canvas.draw_text(str(cards[n]), (n * 50 + 15, 65), 50, 'Black') 


# create frame and add a button and labels 
frame = simplegui.create_frame("Memory", 800, 100) 
frame.set_canvas_background('Red') 
frame.add_button("Reset", new_game) 
label = frame.add_label("Turns = 0") 

# register event handlers 
frame.set_mouseclick_handler(mouseclick) 
frame.set_draw_handler(draw) 

# get things rolling 
new_game() 
frame.start() 

# Always remember to review the grading rubric 

我注释掉第31行至34,这就是在那里我有一个问题的一部分。控制台不断告诉我Line 31: SyntaxError: bad input (' '),但我认为缩进是正确的。

请帮我弄清楚为什么这是一个'糟糕的输入',非常感谢!

更新:

由于罗素的帮助下,这个功能现在工作。

# define event handlers 
def mouseclick(pos): 
    # add game state logic here 
    global turns, state, pairs, flag 
    pointed = pos[0] // 50 
    if pointed in pairs: 
     pass 
    else: 
     if state == 0: 
      state = 1 
      pairs.append(pointed) 
     elif state == 1: 
      state = 2 
      turns += 1 
      label.set_text('Turns =' + str(turns)) 
      pairs.append(pointed) 
      if cards[pairs[-2]] == cards[pairs[-1]]: 
       flag = True 
      else: 
       flag = False 
     else: 
      state = 1 
      if flag == False: 
       del pairs[-2:] 
      pairs.append(pointed) 

回答

2

您的if语句过于缩进。

elif state == 1: 
    state = 2 
    turns += 1 
    label.set_text('Turns =' + str(turns)) 
    pairs.append(pointed) 
    if cards[pairs[-2]] == cards[pairs[-1]]: 
     flag = True 
    else: 
     flag = False 
else: 
    state = 1 
    if flag == False: 
     del pairs[-2:] 
    pairs.append(pointed) 
+0

感谢您的帮助。我尝试了你的建议,现在问题出现在第32行的一行:“Line 32:SyntaxError:bad input('=')' – leoce

+0

Thanks!尽管对我感到羞耻......我还有一个问题要问,我已经更新了我的问题。如果我没有将变量'flag'设为全局变量,那么程序会在赋值之前引用一个错误'行38:undefined:Error:局部变量'标志'。但是变量'flag'完全是本地的,不涉及函数外的任何代码。我不是为什么我需要全球化。这背后有逻辑吗?非常感谢! – leoce

+0

我认为这可能是因为如果代码进入'else'并检查'flag flag = False',那么在此阶段标志还没有被初始化。当你进入函数时,你应该将它默认为“True”或“False”。 – Dobz