Forum tips

Writing in Hebrew
If you post a forum message in Hebrew (or English mixed with Hebrew), add[[div style="direction:rtl;"]]
before your message, and[[/div]]
after it (each on a separate line).

Including Python code
When including python code in your message, if you don't want to lose the indentation, and also benefit from syntax highlighting, add[[code type="python"]]
before the code, and[[/code]]
after it (each on a separate line).

BoldPut ** before and after the text: a**b**c —> abc

UnderlinePut __ before and after the text: a__b__c —> abc

Raw textPut @@ before and after the text, to ignore formatting: @@a**b**c@@ --> a**b**c

Hi Kobi ;)
You should avoid unnecessary base cases to make your code more readable and also to not miss bugs you thought you covered with addition of those cases, quote of myself from another comment here that may help you:

A good tip would be to avoid adding constants (+-1) that may cause this kind of out-of-range problems (does list with one item works for you?), a well planned code should work for an empty list and maybe even to iterate until "getting" one.

We did not specifically instruct what size of a sub-list should terminate the loop, so there is some degree of freedom here. But I'd recommend not to go to far with it - you would not consider halting when size reaches 17, right?

Check my answer to Kobi, almost the exactly same question…
About the functions, as Amir said: as long as they don't explicitly note that you shouldn't use a function, there is no reason to believe they implicitly meant that you wouldn't. (added a reference to the recitations ;) )

I am not sure I understand the instruction to not use a recursive function. This is what I understand:

The function needs to divide the list of numbers (which is already ordered) into three sub-lists, and then choose which list to continue to "search" in by the first and last number of the middle-list (for instance).
Then the function continues to do the same thing (divide this new list into three sub-lists) until it finds the location of the correct number. Within the function, the function cannot call the function again, but it is to repeat the same task of dividing the lists into three.
Is this correct?

Why shouldn't it?
A good tip would be to avoid adding constants (+-1) that may cause this kind of out-of-range problems (does list with one item works for you?), a well planned code should work for an empty list and maybe even to iterate until "getting" one.

From his description of the bug (not working on short lists) I believe the reason for the bug is getting out of range, If you will add or subtract one from indexes of a list which is too short you will get out of range, while you can use something like (n)//3 instead.

You are the one to decide whether or not to include them in the new parts in your code,
And by the way, personally, I believe their intention was just to make sure you aren't going to use the binary search code as it is or to make your answer to B the one they meant to receive.

The [0] is a mistake in case the list you are using is not of iterables - you want to check the list at the middle position, not the 0th element of the the element in the middle position.
The example given in the presentation was for a list of students, where each student was a list consisting of name and id number - so in order to search for a name they needed to compare against the 0th element of the element in the list.

That's right. Many people confuse arbitrary and random.
Random means you toss a coin (or do some other operation whose results are unpredicted), and you cannot guarantee you'll get the same result every time.
Arbitrary means you make a choice and stick with it, but that one time choice could have been any other among the options you had.

If anyone has more insights into the diff between random and arbitrary - please share!