Python全局变量?

2024-09-27 21:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

所以基本上这是一个小字符串游戏的一部分,我正在做,这是真的嗡嗡叫我出来。玩家可以按“a”或“d”在房间里向左或向右看以收集线索。如果玩家已经看过那个地方。它弹出一条信息说“你已经来过这里了”

虽然,它会去一次正确的点,然后下一个点会弹出一条消息说“你已经在这里”。例子。如果我按“a”,那么“d”代表“d”,它会说我已经去过那里了,但我还没有去过。有什么帮助/建议吗??你知道吗

left = 0
right = 0
#Room 1 movements
def roomOneLeft():
    global left
    left = 1
    print '-- You search the rubble and find some cloth'
    return roomOneMoves()

def roomOneRight():
    global right
    right = 1
    print '-- You find a pick under a wooden chair'
    return roomOneMoves()

#room 1 user choose
def roomOneMoves():
    global left
    global right
    move = raw_input("")
    if left == 1:
        print 'you have already been here'
        return roomOneMoves()
    if right == 1:
        print 'you have already been here'
        return roomOneMoves() 
    if move == 'a':
        roomOneLeft()     
    if move == 'd':
        roomOneRight()

roomOneMoves()

编辑:谢谢大家的帮助。我很抱歉,如果我的代码是相当令人沮丧的看!现在开始工作了。但只有你的帮助。你知道吗


Tags: rightyoumovereturnifdef玩家find
3条回答

浏览代码:

  1. 我们称之为roomOneMoves()
  2. 用户按a,移动变为'a'
  3. left不是1,所以我们不进入if的那个分支。你知道吗
  4. right不是1,所以我们不进入if的那个分支。你知道吗
  5. move'a',所以我们称之为roomOneLeft()
  6. left变成1,我们打印一条消息,然后再次调用roomOneMoves()。你知道吗
  7. 用户按dmove变成'd'
  8. left现在是1,所以我们打印一条消息并再次调用roomOneMoves()。你知道吗

换言之,在决定用户真正想去哪个房间之前,您要先检查自己是否去过房间并退出。你知道吗

你不检查你的行动,直到为时已晚。观察:

move = raw_input("")
if left == 1:
    print 'you have already been here'
    return roomOneMoves()
if right == 1:
    print 'you have already been here'
    return roomOneMoves() 
if move == 'a':
    roomOneLeft()     
if move == 'd':
    roomOneRight()

如果用户真的向左走了,你只想计算left == 1部分,不是吗?相反,嵌套if语句,如下所示:

move = raw_input("")
if move == 'a':
    if left:
        print 'you have already been here'
        return roomOneMoves()
    roomOneLeft()
if move == 'd':
    if right:
        print 'you have already been here'
        return roomOneMoves() 
    roomOneRight()

此外,您应该重新考虑数据结构,使用具有布尔值或类似值的字典,而不是全局变量。此外,由于大多数Python解释器无法有效地计算tail recursion,因此您可能希望使用迭代的主循环,而不是递归地调用下一个函数。你知道吗

虽然有很多事情可以说是'不确定'关于您的代码,您的问题来自这样一个事实,即无论玩家的移动leftright都被检查。如果按“a”left,则变为1。在它之后按“d”将检查left是否为1并打印消息。你知道吗

相关问题 更多 >

    热门问题