Python代码函数未正确更新变量

Python代码函数未正确更新变量,python,function,variables,Python,Function,Variables,我试图做一个简单的基于文本的房间游戏,你可以从一个房间到另一个房间,它会给你一个描述,你可以四处走动。输入1后,输出相应工作。在它要求您再次输入并且您输入了一个方向之后,程序什么也不做。 我在前面的代码中定义了不同的room1、room2等。我认为这与我的方向函数和xy变量有关,但我不完全确定问题出在哪里 import time import sys x=1 y=1 def direction(): global x global y prompt = input("\

我试图做一个简单的基于文本的房间游戏,你可以从一个房间到另一个房间,它会给你一个描述,你可以四处走动。输入1后,输出相应工作。在它要求您再次输入并且您输入了一个方向之后,程序什么也不做。 我在前面的代码中定义了不同的room1、room2等。我认为这与我的方向函数和xy变量有关,但我不完全确定问题出在哪里

import time
import sys
x=1
y=1
def direction():
    global x
    global y

    prompt = input("\nChoose a direction using AWSD:\n")
    if prompt == "a" or prompt == "A":
        x -= 1
    elif prompt == "s" or prompt == "S":
        y -= 1
    elif prompt == "w" or prompt == "W":
        y += 1
    elif prompt == "d" or prompt == "D":
        x += 1

def stutter(text):
    for c in text:
        print(c, end="")
        sys.stdout.flush()
        time.sleep(.04)
stutter(""""You wake up in a dark room with a rusty iron door. There is a small
circular window casting a dim light across the room. Theres two doors leading
out. One forward and one to the right.""")
direction()






if x==1 and y==1:
    stutter(room1)
    direction()
elif x==1 and y==2:
    stutter(room2)
    direction()
elif x==1 and y==3:
    stutter(room3)
    direction()
elif x==2 and y==1:
    stutter(room4)
    direction()
elif x==2 and y==2:
    stutter(room5)
    direction()
elif x==2 and y==2:
    stutter(room6)
    direction()
elif x==3 and y==1:
    stutter(room7)
    direction()
elif x==3 and y==2:
    stutter(room8)
    direction()
elif x==3 and y==3:
    stutter(room9)
    direction()
else:
    stutter("You hit a wall")
    direction()

您必须引入一个
while
循环,如下所示:

while(True):
    if x==1 and y==1:
        stutter(room1)
    elif x==1 and y==2:
        stutter(room2)
    elif x==1 and y==3:
        stutter(room3)
    elif x==2 and y==1:
        stutter(room4)
    elif x==2 and y==2:
        stutter(room5)
    elif x==2 and y==2:
        stutter(room6)
    elif x==3 and y==1:
        stutter(room7)
    elif x==3 and y==2:
        stutter(room8)
    elif x==3 and y==3:
        stutter(room9)
    else:
        stutter("You hit a wall")
    direction()
否则它只请求一次,因为不再调用
stutter()


另一方面,你应该试着理解数组,可能还有dict,因为它们可以摆脱那一长串的坐标检查。

整个
如果elif
部分必须包含在一个无限循环中,
direction()
调用必须被删除,除了第一个(也包括在循环中)。