List comprehension, generator expression

A list comprehension executes immediately and returns a list, which is an iterable object.

A generator expression is an iterator object. It does almost the same as list comprehension but does it lazily.

Iterable is an object, which one can iterate over. It generates an Iterator when passed to iter() method. Iterator is an object, which is used to iterate over an iterable object using __next__() method. Iterators have __next__() method, which returns the next item of the object.

Note that every iterator is also an iterable, but not every iterable is an iterator.

Let's see the differences between list comprehension and generator expression again:

A 'generator' object is not subscriptable, and we can iterate over it only once. So in embedded loops, we can not use two generator expression:

Conditional relative frequency

Let us throw two dice, a red and a blue one, and let s denotes the sum. What is the relative frequency (relative frequency of a conditional event) of 1 on the red die if s is given? What is the relative frequency of any other number on the red die if s is given? For which value of s will be this frequency close to 1/6?

Conditional probability

Let us throw two dice, a red and a blue one, and let s denotes the sum. What is the probability that the number r is on the red die if s is given? For which value of s will be this frequency equal to 1/6?

2. Monty Hall problem

deadline 2020-09-25, 22:00, 5 points

From Wikipedia: "The Monty Hall problem is a brain teaser, in the form of a probability puzzle, loosely based on the American television game show Let's Make a Deal and named after its original host, Monty Hall. The problem was originally posed (and solved) in a letter by Steve Selvin to the American Statistician in 1975. It became famous as a question from a reader's letter quoted in Marilyn vos Savant's "Ask Marilyn" column in Parade magazine in 1990:

Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, "Do you want to pick door No. 2?" Is it to your advantage to switch your choice?"

There are three possible answers:

  1. Yes, it is worth changing the original choice.
  2. No, I would keep the original choice (I could not bear to have missed the opportunity).
  3. All the same, I may keep or change my decision, it does not change the chance of winning the car.

Write a program, which simulate 1000 times all these three playing strategies. The program

  1. choose a door which will be the winner choice (the car is behind that door),
  2. in the role of the player randomly choose a door from the three doors independently from the previous choice (hoping that the car is there),
  3. in the role of the host, choose (randomly) a door which hides a goat and different from the door chosen by the player,
  4. in the role of the player 1000 times keep the original decision, in the next 1000 cases change the original decision, and the last 1000 cases with probability 0.5 either keep or change the original decision.
  5. Finaly the program writes out the three relative frequencies of winning the car in the next form:

     Keep the decision     0.457
     Change the decision   0.568
     All the same          0.347

About this task:

There are a lot of information on this problem on the Internet, but first try to understand and answer the question and write the program before reading them.