if条件下的某些语句在执行某些语句时没有执行

时间:2017-11-05 21:35:08

标签: python python-2.7

我写了一个小程序,用于在openai-gym上随机玩pacman。但它的表现非常糟糕,只有一项声明正在if条件下执行。游戏没有渲染(可能是因为env.reset())没有渲染。

import gym

episode = 0
#episode_reward = 0
#running_reward = None
env = gym.make("MsPacman-v0")
env.reset()


while True:
    env.render()
    action = env.action_space.sample()
    #print (action)
    _, __, done, ___ = env.step(action)
    #print(reward)
    #episode_reward += reward

    if done:
        print('Game over')              #Why is this line not printed
        episode = episode + 1           #Why is episode not getting updated
        #running_reward = episode_reward if running_reward is None else  running_reward * 0.99 + episode_reward * 0.01
        #print('Episode %d, episode reward total was %f. running mean: %f' % (episode, episode_reward, running_reward))
        print('Episode, ', episode)      #Only this line is printed on screen
        #episode_reward = 0
        env.reset()

希望我没有犯一些愚蠢的错误!

2 个答案:

答案 0 :(得分:2)

您的代码混合了标签和空格。 (我通过点击你帖子下面的“编辑”并将文本复制到编辑器来检查。)

用空格替换所有标签,它应该解决问题。

enter image description here

答案 1 :(得分:1)

根据我们的讨论in chat,您的文件中似乎混合了制表符和空格,这导致块看起来看起来是连续的,但是解释为两个单独的块({{{ 1}}阻止和其中一个)。

显然这是因为if循环使用制表符缩进,但while块的最后一部分包括if语句使用个空格。所以它是:

print

所以这被解释为等同于:

\t___if done:
\t___....print('Game over')
\t___....episode = episode + 1
 ........print('Episode ', episode)
 ........env.reset()       

如果有Underhanded C competition的python模拟,可能需要注意的事项。