2013-01-13 42 views
1

我没有在我的代码中使用递归,所以我不明白为什么我得到关于递归的错误。 ................................................. ..........................................Python递归错误,但不使用递归

代码是:

from os import system 
from time import sleep 
import msvcrt 

player_location = [0, 0] 
player_dir = [0, 0] 
width = int(raw_input('Width:')) 
height = int(raw_input('Height:')) 

def get_input(): 
    if msvcrt.kbhit(): 
     return msvcrt.getch() 
    else: 
     return '' 

def update_screen(): 
    global player_location 
    system('cls') 
    for i in range(0, (height-1)): 
     if i == player_location[0]: 
      print (' ' * (player_location[1] - 1)) + 'X' + (' '*(width*2 - player_location[1] - 1)) + '|' 
     else: 
      print (' ' * width * 2) + '|' 
    print ('-' * width * 2) + '+' 

def get_input(): 
    global player_dir 
    player_dir = [0, 0] 
    inp = get_input() 
    if inp == 'q': 
     exit() 
    elif inp == 'w': 
     player_dir[0] = -1 
    elif inp == 's': 
     player_dir[0] = 1 
    elif inp == 'd': 
     player_dir[1] = 1 
    elif inp == 'a': 
     player_dir[1] = -1 

def actions(): 
    global player_dir, player_location 
    player_location[0] += player_dir[0] 
    player_location[1] += player_dir[1] 

if __name__ == '__main__': 
    while True: 
     update_screen() 
     sleep(10) 
     get_input() 
     actions() 

该错误是这样的:

Traceback (most recent call last): 

然后这条线一堆倍:

File "C:\Python\txtpltfrmr.py", line 29, in get_input 
    inp = get_input() 

然后这一行:

RuntimeError: maximum recursion depth exceeded 
+3

你正在使用递归,你只是没有意识到它。你的'get_input'函数自己调用。 – BrenBarn

+0

“in get_input:inp = get_input()”应该是你的提示,也许问题是get_input调用get_input。 – Ben

+0

你看过第29行的get_input了吗?如果只有所有错误消息都精确地指出了错误。 –

回答

7
def get_input(): 
    if msvcrt.kbhit(): 
     return msvcrt.getch() 
    else: 
     return '' 

def get_input(): 
    global player_dir 
    player_dir = [0, 0] 
    inp = get_input() # INFINITE RECURSION, CALLS ITSELF 

这是你的问题。您有两个称为get_input的函数具有匹配的签名。重命名其中的一个,可能是第一个类似get_character的东西。