# AI News, How to Think Like a Computer Scientist: Learning with Python 2nd Edition/Dictionaries

## How to Think Like a Computer Scientist: Learning with Python 2nd Edition/Dictionaries

All of the compound data types we have studied in detail so far --- strings, lists, and tuples---are sequence types, which use integers as indices to access the values they contain within them.

As we saw earlier with strings and lists, dictionary methods use dot notation, which specifies the name of the method to the right of the dot and the name of the object on which to apply the method immediately to the left of the dot.

As we will see in a few chapters when we talk about object oriented programming, the object on which a method is invoked is actually the first argument to the method.

If you played around with the fibonacci function from the last chapter, you might have noticed that the bigger the argument you provide, the longer the function takes to run.

On one of our machines, fibonacci(20) finishes instantly, fibonacci(30) takes about a second, and fibonacci(40) takes roughly forever.

call graph shows a set function frames, with lines connecting each frame to the frames of the functions it calls.

At the top of the graph, fibonacci with n = 4 calls fibonacci with n = 3 and n = 2.

In turn, fibonacci with n = 3 calls fibonacci with n = 2 and n = 1.

Python provides a type called long that can handle any size integer (limited only by the amount of memory you have on your computer).

Because different letters appear with different frequencies, we can compress a file by using shorter codes for common letters and longer codes for letters that appear less frequently.

To make the game playable, you also are given the ability to teleport to another location on the screen -- 3 times safely and randomly thereafter, so that you don't just get forced into a corner and loose every time.

Let's start with a program that places the player on the screen and has a function to move her around in response to keys pressed:

Programs like this one that involve interacting with the user through events such as key presses and mouse clicks are called event-driven programs_.

Pressing the escape key causes move_player to return True, making not finished false, thus exiting the main loop and ending the game.

The 4, 7, 8, 9, 6, 3, 2, and 1 keys all cause the player to move in the appropriate direction, if she isn't blocked by the edge of a window.

Now add the line robot = place_robot() in the main body of the program immediately after the line player = place_player(), and add the move_robot(robot, player) call inside the main loop immediately after finished = move_player(player).

How we provide safe placement of the player will depend on how we represent multiple robots, so it makes sense to tackle adding more robots first.

Now instead of calling place_robot in play_game, call place_robots, which returns a single list containing all the robots:

We have already solved the problem of moving a single robot, however, so traversing the list and moving each one in turn does the trick:

Add check_collisions immediately after collided and change the line in play_game that sets defeated to call check_collisions instead of collided.

With careful maneuvering and a bit of luck teleporting, we can reach the point where it appears there is only one robot chasing the player (all the robots will actually just be on top of each other).

This moving pile of robots will continue chasing our hapless player until it catches it, either by a bad move on our part or a teleport that lands the player directly on the robots.

Be sure to modify the call to check_collisions (currently defeated = check_collisions(robots, player)) to include junk as a new argument.

To test whether our new logic is actually working, we could introduce a single junk pile and run our player into it, at which point the game should remove all items from the screen and display the ending message.

It will be helpful to modify our program temporarily to change the random placement of robots and player to predetermined locations for testing.

To remove robots that collide with piles of junk, we add a nested loop to check_collisions between each robot and each pile of junk.

Since we have two robots on top of each other, when the collision of the first one is detected and that robot is removed, we move the second robot into the first position in the list and it is missed by the next iteration.

The solution in this case is to loop over the robots list backwards, so that when we remove a robot from the list all the robots whose list indexes change as a result are robots we have already evaluated.

Whenever two robots collide, our plan calls for adding a piece of junk at that location, marking the first robot for later removal (we still need it to compare with the other robots), and immediately removing the second one.

After robot1 is marked as junk, we add a pile of junk to the junk list at the same location with junk.append(place_robot(robot1['x'], robot1['y'], True)), and then remove robot2 from the game by first removing its shape from the graphics window and then removing it from the robots list.

Since the player wins when all the robots die, and the robot list will be empty when it no longer contains live robots, we can simply check whether robots is empty to determine whether or not the player has won.

This can be done in check_collisions immediately after we finish checking robot collisions and removing dead robots by adding:

In its current state, check_collisions is a Boolean function that returns true when the player has collided with something and lost the game, and false when the player has not lost and the game should continue.

In order to handle this with as few changes as possible to our present program, we will take advantage of the way that Python permits sequence types to live double lives as Boolean values.

UiPath Essentials Training - 3 4 Data Manipulation

In this training, you will learn some basics about working with data in RPA projects.

What Is A Idler Gear Used For?

List an example where this mechanism might be used. We are sure that these idler reverse gear pin of tata ace is avaliable in grinding finishkahanpura, punjab, ...

Max Tegmark: "Life 3.0: Being Human in the Age of AI" | Talks at Google

Max Tegmark, professor of physics at MIT, comes to Google to discuss his thoughts on the fundamental nature of reality and what it means to be human in the ...

11 | For and While Loops in Python | by Hardik Patel

For loop on list For loop on dictionary using items() method While loop Nested loops For more Update : like page on ..