2015-07-10 5 views
0

Я делаю мини-проект на Coursera, и я могу запускать большую часть своего кода. Однако в критической части есть ошибка, связанная с проверкой игры.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 (' '), но я думаю, что отступ правильно сделан.

Пожалуйста, помогите мне понять, почему это «плохой вход», спасибо большое!

Update:

Благодаря помощи Рассела, эта функция теперь работает.

# 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: 'Строка 32: СинтаксисError: bad input ('=')' – leoce

+0

Спасибо! Позор мне, хотя ... У меня есть еще одна просьба, и я обновил свой вопрос. Если я не сделаю переменную 'flag' global, программа выкинет ошибку' Строка 38: undefined: Ошибка: локальная переменная 'flag', на которую ссылаются перед присваиванием'. Но переменная 'flag' является полностью локальной, без ссылки на любой код вне функции. Я не понимаю, зачем мне это глобально. Есть ли какая-то логика? Большое спасибо! – leoce

+0

Я думаю, это может быть потому, что если код переходит в 'else' и проверяет флаг if if == False:', на этом этапе флаг не был инициализирован. При входе в функцию вы должны по умолчанию использовать «True» или «False». – Dobz