Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python Python Testing First Steps With Testing Writing and Running Doctests

benjamin siverly
benjamin siverly
3,430 Points

Confused with how tests work in Python - see results

I'm not exactly sure how / why this is giving me trouble - since expected and got are the same, shouldn't that be a success?

treehouse:~/workspace/dungeon$ python -m doctest dd_game.py                        
File "/home/treehouse/workspace/dungeon/dd_game.py", line 54, in dd_game.get_moves 
Failed example:                                                                    
    get_moves((0, 2))                                                              
    ['RIGHT', 'UP', 'DOWN']                                                        
    ['RIGHT', 'UP', 'DOWN']                                                        
1 items had failures:                                                              
   1 of   2 in dd_game.get_moves                                                   
***Test Failed*** 1 failures.
Steven Parker
Steven Parker
221,900 Points

Sharing your code along with the results would be most helpful for analyzing your issue.

benjamin siverly
benjamin siverly
3,430 Points
"""dungeon game : explore a dungeon to find a hidden door and escape. Be careful, a dragon is hiding somewhere in the dark."""
import os
import random

player = {'location': None, 'path': []}

def clear():
    """Clear the screen"""
    os.system('cls' if os.name == 'nt' else 'clear')

def build_cells(width, height):
    """create and return width by height grid of two tuples

    >>> cells = build_cells(2, 2)
    >>> len(cells)

    cells = []
    for y in range(height):
        for x in range(width):
            cells.append((x, y))
    return cells

def get_locations(cells):
    """ randomly pick starting locations for monster, door, player

    >>> cells = build_cells(2,2)
    >>> m, d, p = get_locations(cells)
    >>> m != d and d!= p and m != p
    >>> d in cells

    monster = random.choice(cells)
    door = random.choice(cells)
    player = random.choice(cells)

    if monster == door or monster == player or door == player:
        monster, door, player = get_locations(cells)

    return monster, door, player

def get_moves(player):
    """based on tuple of player position, return list of acceptable moves.

    >>> GAME_DIMENSIONS = (2, 2)
    >>> get_moves((0, 2))
    ['RIGHT', 'UP', 'DOWN'] 

    x, y = player
    moves = ['LEFT', 'RIGHT', 'UP', 'DOWN']
    if x == 0:
    if x == GAME_DIMENSIONS[0] - 1:
    if y == 0:
    if y == GAME_DIMENSIONS[1] - 1:
    return moves

def move_player(player, move):
    x, y = player['location']
    player['path'].append((x, y))
    if move == 'LEFT':
        x -= 1
    elif move == 'UP':
        y -= 1
    elif move == 'RIGHT':
        x += 1
    elif move == 'DOWN':
        y += 1
    return x, y

def draw_map():
    print(' _'*GAME_DIMENSIONS[0])
    row_end = GAME_DIMENSIONS[0]
    tile = '|{}'
    for index, cell in enumerate(cells):
        if index % row_end < row_end - 1:
            if cell == player['location']:
                print(tile.format('X'), end='')
            elif cell in player['path']:
                print(tile.format('.'), end='')
                print(tile.format('_'), end='')
            if cell == player['location']:
            elif cell in player['path']:

def play():
    cells = build_cells(*GAME_DIMENSIONS)
    monster, door, player['location'] = get_locations(cells)

    while True:

        print("WELCOME TO THE DUNGEON!")
        moves = get_moves(player['location'])


        print("\nYou're currently in room {}".format(player['location']))
        print("\nYou can move {}".format(', '.join(moves)))
        print("Enter QUIT to quit")

        move = input("> ")
        move = move.upper()

        if move in ['QUIT', 'Q']:

        if move not in moves:
            print("\n** Walls are hard! Stop running into them! **\n")

        player['location'] = move_player(player, move)

        if player['location'] == door:
            print("\n** You escaped! **\n")
        elif player['location'] == monster:
            print("\n** You got eaten! **\n")

if __name__ == '__main__':

3 Answers

Steven Parker
Steven Parker
221,900 Points

:point_right: There's a space after the closing bracket on line 55.

Apparently extra white space on the line throws off the comparison.

Chris Freeman
Chris Freeman
Treehouse Moderator 68,227 Points

Beyond getting the tests to pass there is a syntax error:

Traceback (most recent call last):
  File "<string>", line 141, in <module>
  File "<string>", line 115, in play
TypeError: draw_map() takes 0 positional arguments but 1 was given

? Fix by adding parameter:

def draw_map(cells):

Nice catch Chris :)

benjamin siverly
benjamin siverly
3,430 Points

Way to go! That was very helpful!

benjamin siverly
benjamin siverly
3,430 Points

Figured it out! A space after the expected outcome threw it off but when I removed all whitespace it ran fine.

Good to know for the future though :)